假设我有
arr = np.arange(6)
arr
array([0, 1, 2, 3, 4, 5])
我决定把一个数组当作一个圆来处理:当我用完最后的材料时,我想再从索引0开始。也就是说,我想要一个方便的方法来选择
x
元素,从indexi
开始。现在,如果
x == 6
,我可以i = 3
np.hstack((arr[i:], arr[:i]))
Out[9]: array([3, 4, 5, 0, 1, 2])
但是,有没有一种方便的方法可以做到这一点,即使
x > 6
,也不必手动将数组分开并考虑逻辑?例如:
print(roll_array_arround(arr)[2:17])
应该会回来。
array([2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0])
最佳答案
请参见ndarray.take中的mode=“wrap”:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.take.html
假设你的功能:
print(roll_array_arround(arr)[2:17])
如果这意味着它是您所追求的原始数组的一个真正的片段,则不会发生这种情况;环绕数组不能表示为原始数组的跨步视图;因此,如果您寻求将一个ndarray映射到一个ndarray的函数,则这必然涉及到数据的一个副本。
也就是说,在效率方面,您不应该期望找到与下面的表达式在性能上有显著差异的解决方案。
print(arr.take(np.arange(2,17), mode='wrap'))
关于python - 滚动阵列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49791146/