在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]
? - Joe Kingtonx.shape[:-2]
返回x.shape
到倒数第二个元素(但不包括它)。因此对于一个三维数组x
,它仅返回x.shape
的第一个元素。我使用[:-2]
而不是[0]
,因为我正在寻找适用于所有 N>2 的 ND 数组的通用解决方案。 - EelkeSpaak