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

# 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.

## Products

No products are associated with this question.

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

```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.

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));
```

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