Matlab产生随机数
用randperm(200)可以得1-200的随机排序的行向量A=[111213111112];B=[313233191192];我想让产生的随机行向量中A(i)必须排在...
用randperm(200) 可以得1-200的随机排序的行向量
A=[11 12 13 111 112];
B=[31 32 33 191 192];
我想让产生的随机行向量中A(i)必须排在对应的B(i)之前。
如何进行限制,求指教 展开
A=[11 12 13 111 112];
B=[31 32 33 191 192];
我想让产生的随机行向量中A(i)必须排在对应的B(i)之前。
如何进行限制,求指教 展开
1个回答
展开全部
给你个建议,分成两步:1)随机重排A中元素,得向量A';2)利用for循环,将B中元素一一插入到A'中,不过对应的B(i)元素只能插在A(i)元素后面的位置。如此应该就能满足你的要求了。
% ---- 对应函数
function [AB, ind] = myperm(A, B)
% permate two vector follow the lay: A(i) before B(i)
% input check - 输入检查
if nargin == 1
B = A;
end
if length(B(:)) ~= length(A(:)) % 长度不一致,报错!
error('the input vectors must have the same length. ');
end
N = length(A(:));
AB = cat(1,A(:),B(:)); % to be a vector - 合并A, B成一列向量
% indA = 1:N; indB = N + (1:N); - A指标为1:N, B指标为N+1:2*N
ind = randperm(N); % permate vector A index - 重排A中元素
for k = 1:N % insert elements of B - 将B中元素,按要求一一插入
nA = length(ind);
id = find(ind+N == N + k); % find B index corresponding index A
tmp = randi(nA-id+1,1,1); % there have nA-id+1 site wait for B-k-index
ind = [ind(1:(id+tmp-1)), N+k, ind((id+tmp):nA)]; % insert
end
AB = AB(ind);
% ---- 函数测试
>> A = [11 12 13 111 112];
>> B = [31 32 33 191 192];
>> AB = myperm(A,B);
>> AB'
ans =
13 111 33 112 12 192 32 11 31 191
>> AB = myperm(A,B)'
AB =
112 11 192 12 31 13 32 33 111 191
% ---- 对应函数
function [AB, ind] = myperm(A, B)
% permate two vector follow the lay: A(i) before B(i)
% input check - 输入检查
if nargin == 1
B = A;
end
if length(B(:)) ~= length(A(:)) % 长度不一致,报错!
error('the input vectors must have the same length. ');
end
N = length(A(:));
AB = cat(1,A(:),B(:)); % to be a vector - 合并A, B成一列向量
% indA = 1:N; indB = N + (1:N); - A指标为1:N, B指标为N+1:2*N
ind = randperm(N); % permate vector A index - 重排A中元素
for k = 1:N % insert elements of B - 将B中元素,按要求一一插入
nA = length(ind);
id = find(ind+N == N + k); % find B index corresponding index A
tmp = randi(nA-id+1,1,1); % there have nA-id+1 site wait for B-k-index
ind = [ind(1:(id+tmp-1)), N+k, ind((id+tmp):nA)]; % insert
end
AB = AB(ind);
% ---- 函数测试
>> A = [11 12 13 111 112];
>> B = [31 32 33 191 192];
>> AB = myperm(A,B);
>> AB'
ans =
13 111 33 112 12 192 32 11 31 191
>> AB = myperm(A,B)'
AB =
112 11 192 12 31 13 32 33 111 191
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询