numpy.roll
np.roll()用于循环移动数组中的元素。
其定义为:
np.roll(a, shift)
- a是输入数组
- shift是要移动的位置数。正数向右移动,负数向左移动。
例如,如果你有一个数组:
a = [1, 2, 3, 4, 5]
np.roll(a, 2)的结果是:
[4, 5, 1, 2, 3]
因为向右移动2个位置,所以1和2移动到了最后,4和5移动到了前面。
np.roll(a, -1)的结果是:
[5, 1, 2, 3, 4]
因为向左移动1个位置,所以最后一个元素5移动到了最前面。
这个函数常用于:
- 环形缓冲 - 通过循环移动模拟环形队列等数据结构。
- 时间序列滚动窗口 - 计算滚动窗口的统计量,如平均值、总和等。
- 模拟液体滚动 - 可以用于模拟液体在容器中滚动的视觉效果。
例子:
import numpy as np
# 环形缓冲
buffer = [1, 2, 3, 4, 5]
np.roll(buffer, 1) # [5, 1, 2, 3, 4]
np.roll(buffer, -1) # [2, 3, 4, 5, 1]
# 滑动时间窗口
data = [1, 2, 3, 4, 5, 6, 7, 8]
window_size = 3
window = data[:window_size] # [1 2 3]
for d in data[window_size:]: # [4, 5, 6, 7, 8]
window = np.roll(window, -1) # [2 3 4], [3 4 5], [4 5 6] ...
print(window)
总之,np.roll()是NumPy中一个简单但非常实用的函数,可以通过循环移动数组元素来实现环形缓冲、滚动窗口计算等效果。