Auto fill zero matrix without row-repetitions
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Please help. I'm new to matlab scripting and need a bit of help. I have a series of numbers: test = [1 1 1 2 2 2 3 3 3 4 4 4 5 5 5] which I wants to randomely fill into a 5x3 matrix without having the same number in the same row. How can I do this??? Potentially I could randomize the test vector and fill it into the 5x3 matrix but I dont know how to do this without getting the same number in the same row. PLEASE help...
Réponse acceptée
Plus de réponses (2)
KSSV
le 5 Juin 2017
You can take the unique matrix of test and pick any three elements out of it and fill in the required 5X3 matrix.
test = [1 1 1 2 2 2 3 3 3 4 4 4 5 5 5] ;
test_unique = unique(test) ;
A = zeros(5,3) ;
for i = 1:size(A,1)
A(i,:) = randsample(test_unique,3) ;
end
randsample needs a statistics toolbox, if you doesn't have it, you may use randperm as shown below.
test = [1 1 1 2 2 2 3 3 3 4 4 4 5 5 5] ;
test_unique = unique(test) ;
A = zeros(5,3) ;
for i = 1:size(A,1)
A(i,:) = test_unique(randperm(length(test_unique),3)) ;
end
3 commentaires
Walter Roberson
le 5 Juin 2017
Elements cannot repeat in any row, but all elements of T must be placed in the 5 x 3 matrix.
Your code prevents elements from repeating in any one row, but the number of copies of any given member of T is not the same as the original. For example your code could randomly create
[1 2 3
1 2 3
1 2 3
1 2 3
1 2 3]
with no 4 or 5 anywhere.
Andrei Bobrov
le 5 Juin 2017
Modifié(e) : Andrei Bobrov
le 5 Juin 2017
m = 5;
n = 3;
A = reshape(test,n,m)';
out = A(bsxfun(@plus,hankel(1:m,[m,1:n-1]),m*(0:n-1)));
out = out(randperm(m),:);
out = out(:,randperm(n));
ADD
m = 5;
n = 3;
test = repelem(1:3,3);
A = nan(n,m);
A(1:numel(test)) = test;
[~,ii] = sort(rand(n,m),2);
out = A(bsxfun(@plus,n*(ii-1),(1:n)'));
4 commentaires
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!