Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

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

Asked by Lorenz on 10 Apr 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.

0 Comments

Lorenz

Products

No products are associated with this question.

2 Answers

Answer by Jan Simon on 10 Apr 2013
Edited by Jan Simon on 10 Apr 2013
Accepted answer

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.

1 Comment

Lorenz on 10 Apr 2013

Thank you, the second method works correctly.

Jan Simon
Answer by Andrei Bobrov on 10 Apr 2013
Edited by Andrei Bobrov on 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 Comments

Lorenz on 17 Apr 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 on 17 Apr 2013

see EDIT

Andrei Bobrov

Contact us