在numpy中连接维度

时间:2014-08-05 19:32:59

标签: python numpy

我有x

[[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]] # shape (2,2,3)

我想要

[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]] # shape (2,6)

也就是说,我想连接中间维度中的所有项目。

我可以通过

在这个特殊情况下得到这个结果
x.reshape(2, 2*3)

或更抽象地

x.reshape(x.shape[0], x.shape[1]*x.shape[2])

是否有一种紧凑的,numpythonic方式来获得任意维度x的结果,最好不需要自己进行任何索引算法?

我一直在玩concatenate功能无济于事。

1 个答案:

答案 0 :(得分:3)

如果您只关心第一维的大小,可以使用

x.reshape(x.shape[0], -1)

-1表示将隐式确定该维度的大小。如果新维度的元组中不超过一个-1,这也适用于更高维数组。

您也可以直接指定数组的shape属性来执行此操作:

x.shape = (x.shape[0], -1)

使用x.reshape(...)和直接分配给x.shape之间的主要区别在于前者可能会创建副本,如果在不修改x的情况下也无法更改x的形状底层内存缓冲区(例如,如果AttributeError是非连续的),后者永远不会生成副本,而是会引发{{1}}。