如何在NumPy中进行循环移位

21

我有一个NumPy数组,例如:

a = np.arange(10)

我该如何将数组的前n个元素移动到末尾?

我找到了这个roll函数,但它似乎只能做相反的操作,即将后n个元素移动到开头。


2
“roll” 不正是你想要的吗?不是将前面的 “n” 个元素移动到末尾,而是将后面的 “len(a)-n” 个元素移动到开头吗? - Sajjan Singh
发布一些数据,说明您想要的与您发现的有何不同。 - BlackVegetable
2个回答

57

为什么不直接使用负数进行滚动呢?

>>> import numpy as np
>>> a = np.arange(10)
>>> np.roll(a,2)
array([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])
>>> np.roll(a,-2)
array([2, 3, 4, 5, 6, 7, 8, 9, 0, 1])

8
你可以使用负偏移。
a = np.arange(10)
print(np.roll(a, 3))
print(np.roll(a, -3))

返回值

[7, 8, 9, 0, 1, 2, 3, 4, 5, 6]
[3, 4, 5, 6, 7, 8, 9, 0, 1, 2]


你能告诉我为什么 circshift(eye(m), 2) 和 numpy.roll(numpy.eye(m), -2)) 会产生不同的结果吗? - Gunjan naik
1
1.) 什么是circshift? 2)评论不是问与问题无关的问题的正确场所。 - Francesco Montesano
@FrancescoMontesano circshiftMATLAB 函数 - Zoltán Csáti
我不懂Matlab。我的猜测是:从0或1开始索引;列优先还是行优先排序;... - Francesco Montesano
numpy.roll在“轴”方面使用了一种奇特的默认行为:“默认情况下,在移位之前将数组展平,然后恢复原始形状。”您可能需要axis =(0,1)才能使这两个函数的行为匹配。 - Giorgos Sfikas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接