我有一个很长的nx3
矩阵。例如,我采用9x3
矩阵
A =
8 9 8
9 2 9
2 9 6
9 9 1
6 5 8
1 8 9
3 2 7
5 4 7
9 9 7
现在我希望它被重新塑造,(将连续的3x3
子矩阵带到下一个维度),这样就可以了,
out(:,:,1) =
8 9 8
9 2 9
2 9 6
out(:,:,2)
9 9 1
6 5 8
1 8 9
out(:,:,3)
3 2 7
5 4 7
9 9 7
我可以用循环做这个,但我想知道如何向量化这个过程..
我可以单独使用reshape
和permute
吗?
答案 0 :(得分:4)
A = [...
8 9 8
9 2 9
2 9 6
9 9 1
6 5 8
1 8 9
3 2 7
5 4 7
9 9 7
3 2 7
5 4 7
9 9 7]
n = size(A,2);
B = permute( reshape(A.',n,n,[]), [2 1 3]) %'
%// or as suggested by Divakar
%// B = permute( reshape(A,n,n,[]), [1 3 2])
out(:,:,1) =
8 9 8
9 2 9
2 9 6
out(:,:,2) =
9 9 1
6 5 8
1 8 9
out(:,:,3) =
3 2 7
5 4 7
9 9 7
out(:,:,4) =
3 2 7
5 4 7
9 9 7
答案 1 :(得分:3)
这可能是一种方法 -
N = 3
out = permute(reshape(A,N,size(A,1)/N,[]),[1 3 2])
这个优点是避免使用other answer by @thewaywewalk中的转置。
示例运行 -
A =
8 9 8
9 2 9
2 9 6
9 9 1
6 5 8
1 8 9
3 2 7
5 4 7
9 9 7
out(:,:,1) =
8 9 8
9 2 9
2 9 6
out(:,:,2) =
9 9 1
6 5 8
1 8 9
out(:,:,3) =
3 2 7
5 4 7
9 9 7