假设我有

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/

10-12 20:02