【发布时间】:2017-02-26 12:02:15
【问题描述】:
我有一个外部模块返回的 numpy ndarray。数组的形状是 (3,3,128)。基本上是一叠 128 块瓷砖,每块瓷砖都是 3x3。
如何重新排序以使形状变为 (128,3,3)。这样就更容易按图块编号进行索引。最后一步是展平到 (128,9),这样 128 个图块中的每一个都可以作为 9 值向量轻松访问。
【问题讨论】:
标签: numpy multidimensional-array reshape
我有一个外部模块返回的 numpy ndarray。数组的形状是 (3,3,128)。基本上是一叠 128 块瓷砖,每块瓷砖都是 3x3。
如何重新排序以使形状变为 (128,3,3)。这样就更容易按图块编号进行索引。最后一步是展平到 (128,9),这样 128 个图块中的每一个都可以作为 9 值向量轻松访问。
【问题讨论】:
标签: numpy multidimensional-array reshape
您可以使用指定新数组顺序的转置,例如,
a = np.arange(0,3*3*128).reshape(3,3,128)
a_reorder = a.transpose([2,0,1])
您可以通过比较所有图块来检查它是否正确,
np.all([np.all(a[:,:,i]==a_reorder[i,:,:]) for i in range(128)])
和扁平化
a_flat = a_reorder.reshape(128,9)
【讨论】:
将 3 * 3 * 128 重塑为 128 * 3 * 3:
y = einops.rearrange(x, 'x y tile -> tile x y')
或者我们可以一次操作直接重塑为 128 * 9
y = einops.rearrange(x, 'x y tile -> tile (x y)')
【讨论】: