How can I create a random array like the example below?

1 次查看(过去 30 天)
A=[1 1 2 2 7 7 9 9]
B=[3 5 6 8 10 11] : randomly choose all items from B and input between 2 same number of A
between same bumber can be no number
for example : C=[1 8 6 1 2 5 3 2 7 11 7 9 10 9]
or C=[1 1 2 5 3 8 2 7 11 6 7 9 10 9]
or C=[1 1 2 5 8 3 2 7 11 6 10 7 9 9]
I asked from another question for help and recieved the below code. But it is not flexible for position of non-number
A=[1 1 2 2 7 7 9 9];
B=[3 5 6 8 10 11];
Na = numel(A);
Nb = numel(B);
Xb = randperm(Nb); % to shuffle the order of B.
if Nb<=Na/2 % "if don't have enough B to fill in"
Xa = zeros(1,Na/2);
Xa(randperm(Na/2,Nb))=1 % the number of elements of B to pick.
else
Xa = randperm(Nb,Na/2-1)
Xa = diff([0,sort(Xa),Nb]) % the number of elements of B to pick.
end
T = [num2cell(A(1:2:Na));mat2cell(B(Xb),1,Xa);num2cell(A(2:2:Na))];
C = [T{:}]

采纳的回答

Jan
Jan 2019-4-29
编辑:Jan 2019-4-30
A = [1 1 2 2 7 7 9 9];
B = [3 5 6 8 10 11];
nA = numel(A);
nB = numel(B);
rB = B(randperm(nB, nB)).';
iA = randi([1, nA/2], nB, 1); % Each value of B gets a bin in A
C = accumarray(iA, rB, [nA/2, 1], @(x) {x});
AC = num2cell(A(1:2:nA).'); % same as for A(2:2:nA)
T = [AC, C, AC].';
Result = vertcat(T{:}).'

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Random Number Generation 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by