我有一个数组a = np.arange(10)
。我想使用np.roll
,其中转变可以是正面的,也可以是负面的。然后我想使用索引来删除已填充到数组的开头(如果移位为正)或结束(如果移位为负)的元素。例如:
>>> a = np.arange(10)
>>> np.roll(a, 1)[1:]
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> np.roll(a, -1)[:-1]
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
是否有一种通用的方法可以在一行中实现这一目标?
答案 0 :(得分:1)
我认为不可能以通用(非硬编码方式)执行此操作。但是编写一个能够满足您需求的简短函数非常容易。
def roll2(arr, i):
"""Roll and clip array"""
if i == 0:
return arr
elif i > 0:
s = slice(i, None)
else:
s = slice(None, i)
return np.roll(a, i)[s]
答案 1 :(得分:0)
为什么你在这里使用roll
?滚动的全部意义在于创建环绕行为,这正是您似乎想要消除的功能。一个简单的切片就足够了:
def shift_right(arr, i):
if i <= 0:
return arr[-i:]
else:
return arr[:-i]
此功能与David's answer
中的功能完全相同