n! permutation matrices
13 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(4 个)
JESUS DAVID ARIZA ROYETH
2019-12-11
identity=eye(4);
total=perms(1:4);
for k=1:24
matrixperm=identity(total(k,:),:)
end
Fabio Freschi
2019-12-11
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)
Stephen23
2019-12-11
编辑:Stephen23
2019-12-11
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 个评论
Bandar
2019-12-11
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multidimensional Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!