6
在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×5矩陣。因此,舉例來說,你
[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
第一個維度是「扁平化」 1號和原M
的第二個維度,但保留任何其他尺寸。
我實際上需要爲5維數組的「中間3維」做這件事,所以一個通用的解決方案將非常棒!例如如果你明白我的意思,W=rand(N,N,N,N,N); mymatrix = W(:, :::, :)
應該給出N x N^3 x N
矩陣。
由於
非常感謝!應該考慮重塑。 PS我只是想到另一種看似工作的方式:'tmp = permute(M,[1,5,2,3,4]);','mymatrix = tmp(:,:)'。不知道它會一直工作嗎?當然''重塑'是**更加可取的。 –