【发布时间】:2013-06-20 23:52:04
【问题描述】:
在 Matlab 中,我们可以像这样跨维度折叠数组:
M = rand(3,4,5);
myvec = M(:); % gives a 60-element vector
我认为这称为序列化或扁平化。元素的顺序是首先是 dim1,然后是 dim2,然后是 dim3——因此您会得到 [M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...]。
但我想做的是沿着前两个维度折叠:
mymatrix = M( :: , : ); % something that works like this?
给出一个 12 x 5 的矩阵。所以,例如,你得到 p>
[M(1,1,1) M(1,1,2) M(1,1,3) M(1,1,4) M(1,1,5)
M(2,1,1) M(2,1,2) M(2,1,3) M(2,1,4) M(2,1,5)
M(3,1,1) M(3,1,2) M(3,1,3) M(3,1,4) M(3,1,5)
M(1,2,1) M(1,2,2) M(1,2,3) M(1,2,4) M(1,2,5)
...
]
所以mymatrix 的第一个维度是原始M 的“扁平化”第一个和第二个维度,但保留任何其他维度。
我实际上需要为 5 维数组的“中间 3 维”执行此操作,因此通用解决方案会很棒!例如如果你明白我的意思,W=rand(N,N,N,N,N); mymatrix = W( :, :::, : ) 应该给出一个 N x N^3 x N 矩阵。
谢谢
【问题讨论】:
标签: arrays matlab multidimensional-array