Matlab 通过将子矩阵分布到三维来重塑矩阵
我有一个长的Matlab 通过将子矩阵分布到三维来重塑矩阵,matlab,matrix,vectorization,reshape,Matlab,Matrix,Vectorization,Reshape,我有一个长的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
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
我可以用循环来实现这一点,但我想知道如何将这个过程矢量化。。
我可以单独使用重塑
和置换
吗?是的,您可以使用和:
这可能是一种方法-
N = 3
out = permute(reshape(A,N,size(A,1)/N,[]),[1 3 2])
这种方法的优点是避免了在应用程序中使用的转置
样本运行-
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
不错,你跑得快了一点。我提出了同样的解决方案,尽管我在第三维使用了
numel(A)/9
,因为OP说他有nx3
数组要拆分。@hbaderts是的,可以概括一下,我将包括它:)谢谢@hbadertsnumel(A)/9
不是一个好选择,因为您还需要了解9。所以size(A,2)
更直接。我知道我可以用permute
和重塑
来实现这一点,我尝试了几种方法,但没有成功。我没有想到要把它转过来。谢谢和+1:)@santhassalai实际上你可以避免转置!:)这当然是真的+1我希望你不介意,我把它也包括在我的答案中,因为其他答案都是一样的。哎呀,现在我对另一个答案的评论是毫无意义的,哈哈,顺便说一句,谢谢你的努力+1:)@thewaywewalk我想这很好,但我想保留这个答案:)
N = 3
out = permute(reshape(A,N,size(A,1)/N,[]),[1 3 2])
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