MATLAB Answers

n! permutation matrices

4 views (last 30 days)
Daniel Brower
Daniel Brower on 11 Dec 2019
Answered: Bandar Aldhafeeri on 11 Dec 2019
I need to generate 24 (4!) distict permutation 4x4 matrices. How would I do that?
The first one would need to be the identity matrix =
[1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1]
Each other would be variations of the identity matrix having different order of rows of the identity matrix. There would be exactly 24 (4!) different possible distict variations of the identity matrix, counting the identity matrix.

  0 Comments

Sign in to comment.

Answers (4)

JESUS DAVID ARIZA ROYETH
JESUS DAVID ARIZA ROYETH on 11 Dec 2019
identity=eye(4);
total=perms(1:4);
for k=1:24
matrixperm=identity(total(k,:),:)
end

  1 Comment

Daniel Brower
Daniel Brower on 11 Dec 2019
How would I put each matrixperm in a cell or array?

Sign in to comment.


Fabio Freschi
Fabio Freschi on 11 Dec 2019
Is this what you wish?
% identity matrix
A = eye(4);
% permuatations
idx = perms(1:4);
% all matrices in a cell array
B = arrayfun(@(i)A(idx(i,:),:),1:24,'UniformOutput',false)

  1 Comment

Daniel Brower
Daniel Brower on 11 Dec 2019
Is there a way to change the cells in B into matrices? I am not familiar with using cells.

Sign in to comment.


Stephen Cobeldick
Stephen Cobeldick on 11 Dec 2019
Edited: Stephen Cobeldick on 11 Dec 2019
A purely numeric solution without loops:
>> I = eye(4);
>> M = reshape(I(:,flipud(perms(1:4)).'),4,4,24)
M =
ans(:,:,1) =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
ans(:,:,2) =
1 0 0 0
0 1 0 0
0 0 0 1
0 0 1 0
ans(:,:,3) =
1 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
ans(:,:,4) =
1 0 0 0
0 0 0 1
0 1 0 0
0 0 1 0
ans(:,:,5) =
1 0 0 0
0 0 1 0
0 0 0 1
0 1 0 0
ans(:,:,6) =
1 0 0 0
0 0 0 1
0 0 1 0
0 1 0 0
... more here
ans(:,:,21) =
0 0 1 0
0 1 0 0
0 0 0 1
1 0 0 0
ans(:,:,22) =
0 0 0 1
0 1 0 0
0 0 1 0
1 0 0 0
ans(:,:,23) =
0 0 1 0
0 0 0 1
0 1 0 0
1 0 0 0
ans(:,:,24) =
0 0 0 1
0 0 1 0
0 1 0 0
1 0 0 0

  0 Comments

Sign in to comment.


Bandar Aldhafeeri
Bandar Aldhafeeri on 11 Dec 2019
You may consider creating multidemintional matrix as follows:
I=eye(4);
pr=perms(1:4);
A=zeros(4,4,24);
for i=1:24
A(:,:,i) = I(pr(i,:),:);
end
A

  0 Comments

Sign in to comment.

Sign in to answer this question.

Products


Release

R2019b