How can I create a random array like the example below?
1 view (last 30 days)
Show older comments
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{:}]
1 Comment
Jan
on 29 Apr 2019
And here is the link to the other thread: https://www.mathworks.com/matlabcentral/answers/458404-how-can-i-create-a-random-array-like-the-example-c
Accepted Answer
Jan
on 29 Apr 2019
Edited: Jan
on 30 Apr 2019
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{:}).'
More Answers (0)
See Also
Categories
Find more on Creating and Concatenating Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!