我有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
功能无济于事。
答案 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}}。