【问题标题】:Reorder and Reshape elements in numpy ndarray在 numpy ndarray 中重新排序和重塑元素
【发布时间】:2017-02-26 12:02:15
【问题描述】:

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

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

【问题讨论】:

    标签: numpy multidimensional-array reshape


    【解决方案1】:

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

    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)
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 2021-03-17
        • 2011-10-31
        • 1970-01-01
        • 2014-05-22
        • 2012-06-11
        • 1970-01-01
        相关资源
        最近更新 更多