在 numpy ndarray 中重新排序和重塑元素

Reorder and Reshape elements in numpy ndarray

我有一个由外部模块返回的 numpy ndarray。数组的形状是 (3,3,128)。基本上是一堆 128 块瓷砖,每块瓷砖是 3x3。

如何重新排序以使形状变为 (128,3,3)。这样可以更容易地按图块编号进行索引。最后一步是展平到 (128,9),这样 128 个图块中的每一个都可以作为 9 值向量轻松访问。

您可以使用指定新数组顺序的转置,例如,

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')

或者我们可以一次操作直接reshape为128 * 9

y = einops.rearrange(x, 'x y tile -> tile (x y)')