在Matlab中,我们可以像这样折叠数组的维度:
我认为这被称为序列化或扁平化。元素的顺序是首先dim1,然后是dim2,然后是dim3--所以你会得到[M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...]。
但我想要做的是仅沿着前两个维度折叠:
这样,
实际上,我需要对一个五维数组的“中间三个维度”执行此操作,因此通用解决方案会很好!例如,
谢谢。
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的矩阵。例如,您可以得到
[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
的第一维和第二维的“展平”,但保留其他任何维度。实际上,我需要对一个五维数组的“中间三个维度”执行此操作,因此通用解决方案会很好!例如,
W = rand(N,N,N,N,N); mymatrix = W( :, :::, : )
应该给出一个 N x N^3 x N
矩阵,如果你明白我的意思的话。谢谢。
tmp = permute(M,[1,5,2,3,4]);
,mymatrix=tmp(:,:)
。不确定它是否总是有效的?当然,“reshape” 更加可取。 - Sanjay Manohar