Effacer les filtres
Effacer les filtres

How can I generate a Matrix (4x4) with random different figures from 1 to 4 ?

53 vues (au cours des 30 derniers jours)
Lorenz
Lorenz le 10 Avr 2013
Hello, How can I generate a Matrix (size 4x4) with random different figures from 1 to 4 ? Figures must be different in the lines and the columns. in example:
A=[1 2 3 4; 2 1 4 3; 3 4 1 2; 4 3 2 1]
thank you.

Réponse acceptée

Jan
Jan le 10 Avr 2013
Modifié(e) : Jan le 10 Avr 2013
You can start with a valid matrix:
A = [1:4; 1:4, 1:4, 1:4];
Then perform only operations, which do not destroy the validity: Interchange rows and columns in pairs:
for k = 1:1000
index = randperm(4, 2); % older Matlab versions accept 1 input only
A(index(1), :) = A(index(2), :);
index = randperm(4, 2);
A(:, index(1)) = A(:, index(2));
end
Or a constructive method which rejects not matching input:
A = zeros(4, 4);
A(1, :) = randperm(4, 4);
index = 2;
while index <= 4
newRow = randperm(4, 4);
match = bsxfun(@ne, A(1:index - 1, :), newRow);
if all(match(:))
A(index, :) = newRow;
index = index + 1;
end
end
Actually trivial ideas with just some tricks in the implementation.

Plus de réponses (1)

Andrei Bobrov
Andrei Bobrov le 10 Avr 2013
Modifié(e) : Andrei Bobrov le 17 Avr 2013
n = 4;
A = rem(bsxfun(@plus,1:n,(0:n-1)')-1,n)+1;
or [EDIT]
A = hankel(1:n,[n 1:n-1]);
A = A(randperm(n),:);
A = A(:,rendperm(n));
  2 commentaires
Lorenz
Lorenz le 17 Avr 2013
Hi, thank you for your answer. How can I now permute the whole rows and whole columns in the order I want? For example row 2 goes to 3 and 3 to 2 and 1 goes to 4 and 4 to 1. The same for the columns.
fliplr, permute, flimud are not very efficient. thank you
Andrei Bobrov
Andrei Bobrov le 17 Avr 2013
Modifié(e) : Andrei Bobrov le 17 Avr 2013
see EDIT

Connectez-vous pour commenter.

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!

Translated by