我有一个4-D阵列a
,其中a.shape = (300, 300, 40, 193)
我想重新塑造它(40,300 * 300 * 193)。
因此,重塑后,new_a[0,:]
应相当于a[:,:,0,:].ravel()
使用numpy.reshape
执行此操作的正确方法是什么?
答案 0 :(得分:1)
执行此操作的一种方法是使用np.rollaxis
。将轴编号2滚动到轴编号0的前面,然后重新成形。
a = np.rollaxis(a, 2, 0)
a = a.reshape((40, 300*300*193))
这是一个较小的演示版本:
>>> a = np.random.randn(30, 30, 40, 19)
>>> b = np.rollaxis(a, 2, 0)
>>> b = b.reshape((40, 30*30*19))
>>> (b[0, :] == a[:, :, 0, :].ravel()).all()
True
答案 1 :(得分:-1)
为什么你不这样做:
a.reshape([a.shape[2], a.shape[0]*a.shape[1]*a.shape[3]])
a.shape #(40, 17370000)