How can I create a random array like the example below?
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaire
Jan
le 29 Avr 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
Réponse acceptée
Jan
le 29 Avr 2019
Modifié(e) : Jan
le 30 Avr 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{:}).'
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!