我在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,GPU版本的numpy。我会更喜欢解决方案最快的GPU,但当然,任何想法都是受欢迎的。
2条答案
按热度按时间balp4ylt1#
您可以使用高级索引:
Y:
wn9m85ua2#
我实现了一个简单的解决方案(
roll_for
),并将其与@Chrysophylaxs的解决方案(roll_indexing
)进行了比较。结论:
roll_indexing
对于小阵列更快,但当阵列变大时,差异缩小,最终对于非常大的阵列比roll_for
慢。实施:
测试项目:
性能指标评测: