让我们使用3D数组代替n维数组来说明我的问题:
>>> import numpy as np
>>> arr = np.ones(24).reshape(2, 3, 4)
所以我有一个形状数组(2、3、4)。我想将第二和第三轴连接/融合在一起,以获得形状为(2,12)的数组。
错误的以为我可以轻松完成np.concatenate
的操作:
>>> np.concatenate(arr, axis=1).shape
(3, 8)
我找到了一种将np.rollaxis和np.concatenate结合使用的方法,但是随着数组维数的增加,它变得越来越难看:
>>> np.rollaxis(np.concatenate(np.rollaxis(arr, 0, 3), axis=0), 0, 2).shape
(2, 12)
有没有简单的方法可以做到这一点?看起来非常琐碎,因此必须存在一些功能,但我似乎找不到它。
编辑:的确,我可以使用np.reshape
,这意味着首先要计算轴的尺寸。是否可以不事先访问/计算形状?
答案 0 :(得分:3)
在最新的python版本上,您可以执行以下操作:
anew = a.reshape(*a.shape[:k], -1, *a.shape[k+2:])
我建议不要直接分配给.shape
,因为它不适用于足够不连续的数组。
答案 1 :(得分:2)
假设您在数组中具有n
个维度,并且希望融合相邻的轴i
和i+1
:
shape = a.shape
new_shape = list(shape[:i]) + [-1] + list(shape[i+2:])
a.shape = new_shape