【问题标题】:Roll first column by 1, second column by 2, etc将第一列滚动 1,将第二列滚动 2,依此类推
【发布时间】:2022-12-18 04:29:44
【问题描述】:

我在 numpy 中有一个数组。我想将第一列滚动 1,将第二列滚动 2,等等。

这是一个例子。

>>> x = np.reshape(np.arange(15), (5, 3))
>>> x
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11],
       [12, 13, 14]])

我想做的事:

>>> y = roll(x)
>>> y
array([[12, 10,  8],
       [ 0, 13, 11],
       [ 3,  1, 14],
       [ 6,  4,  2],
       [ 9,  7,  5]])

最好的方法是什么?

真正的数组会很大。我正在使用 cupy,numpy 的 GPU 版本。我更喜欢在 GPU 上最快的解决方案,但当然,欢迎任何想法。

【问题讨论】:

    标签: python numpy cupy


    【解决方案1】:

    您可以使用高级索引:

    import numpy as np
    
    x = np.reshape(np.arange(15), (5, 3))
    
    h, w = x.shape
    
    rows, cols = np.arange(h), np.arange(w)
    offsets = cols + 1
    shifted = np.subtract.outer(rows, offsets)
    
    y = x[shifted, cols]
    

    是:

    array([[12, 10,  8],
           [ 0, 13, 11],
           [ 3,  1, 14],
           [ 6,  4,  2],
           [ 9,  7,  5]])
    

    【讨论】:

      猜你喜欢
      • 2017-12-01
      • 1970-01-01
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多