How can I generate a Matrix (4x4) with random different figures from 1 to 4 ?
53 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
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.
0 Kommentare
Akzeptierte Antwort
Jan
am 10 Apr. 2013
Bearbeitet: Jan
am 10 Apr. 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.
Weitere Antworten (1)
Andrei Bobrov
am 10 Apr. 2013
Bearbeitet: Andrei Bobrov
am 17 Apr. 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 Kommentare
Siehe auch
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!