【发布时间】:2015-08-27 02:30:48
【问题描述】:
在 Matlab 中,我可以执行以下操作:
X = randn(25,25,25);
size(X(:,:))
ans =
25 625
我经常发现自己想快速折叠数组的尾随维度,但不知道如何在 numpy 中做到这一点。
我知道我能做到:
In [22]: x = np.random.randn(25,25,25)
In [23]: x = x.reshape(x.shape[:-2] + (-1,))
In [24]: x.shape
Out[24]: (25, 625)
但是x.reshape(x.shape[:-2] + (-1,)) 比简单的x(:,:) 简洁得多(并且需要更多关于x 的信息)。
我显然已经尝试过类似的 numpy 索引,但这并没有按预期工作:
In [25]: x = np.random.randn(25,25,25)
In [26]: x[:,:].shape
Out[26]: (25, 25, 25)
关于如何以简洁的方式折叠数组的尾随维度的任何提示?
编辑:请注意,我关注的是结果数组本身,而不仅仅是它的形状。我只是在上面的例子中使用size()和x.shape来表示数组是什么样的。
【问题讨论】:
-
附带说明,您的示例不正确...
x.shape[:-2]将产生一个空元组。 (添加-1意味着该数组将被“展平”为一个15625 长度的数组。)我猜你的意思是x.shape[0]? -
@JoeKington:它是正确的(试试看)。
x.shape[:-2]返回x.shape直到(但不包括)倒数第二个元素。所以对于 3D 数组x,它只返回x.shape的第一个元素。我使用了[:-2]而不是[0],因为我正在寻找一种适用于所有 N>2 的 ND 阵列的通用解决方案。 -
@ElkeSpaak - 对。我没有想清楚。
-
那个 MATLAB 是否可以处理 4 维或 5 维矩阵?
标签: python arrays numpy multidimensional-array