arrays - 如何折叠一组特定维度的数组?

标签 arrays matlab multidimensional-array

在 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 的矩阵。所以,例如,你得到

[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矩阵,如果你明白我的意思。

谢谢

最佳答案

使用reshape用方括号 ([]) 作为维度长度参数之一的占位符:

sz = size( M );
mymatrix = reshape( M, [], sz(end) );        % # Collapse first two dimensions

mymatrix = reshape( M, sz(1), [], sz(end) ); % # Collapse middle dimensions

占位符 [] 告诉 reshape 自动计算大小。请注意,您只能使用一次 []。必须明确指定所有其他尺寸长度。

关于arrays - 如何折叠一组特定维度的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17276062/

相关文章:

c++ - Ruby 和指针与其他语言相比?

matlab - 我如何有效地将图像与分辨率是原始图像两倍的图像进行比较?

python - glpk.LPX 向后兼容性?

java - 使用更新的标记删除 map 上的多个标记

c - 使用长度为 0 的多维数组时出错

matlab - ld : cannot find -lguide while compiling files using mex with intel c++ compiler

javascript - 用于原型(prototype)化多维数组的 typescript 接口(interface)语法?

PHP 动态创建嵌套元素

java - 在 Java 中使用多维数组打印值

c - 使用分区和交换按字母顺序排序