如何基于起始位置和反向偏移量对Numpy数组进行滑动切片?
解决方案
不需要翻转数组,直接通过索引计算就能实现需求,这里分两种场景说明:
1. 单次切片计算
假设你提到的k是1-based的位置(比如例子中k=5对应数组元素5),要获取包含该位置前后的n个连续元素,直接计算0-based的切片起始和结束索引即可:
import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) k = 5 # 1-based位置 n = 3 # 计算0-based索引 start = k - (n // 2) - 1 end = k + (n // 2) result = x[start:end] print(result) # 输出: [4 5 6] # k自增1后 k = 6 start = k - (n // 2) - 1 end = k + (n // 2) result = x[start:end] print(result) # 输出: [5 6 7]
如果你的k是0-based的索引(比如k=4对应元素5),计算方式更简单:
k = 4 # 0-based索引 start = k - (n // 2) end = k + (n // 2) + 1 result = x[start:end]
2. 批量生成滑动窗口
如果需要迭代所有可能的滑动窗口,推荐使用numpy内置的sliding_window_view,一次性生成所有长度为n的连续窗口,效率更高:
windows = np.lib.stride_tricks.sliding_window_view(x, window_size=n) print(windows)
输出结果:
[[ 1 2 3] [ 2 3 4] [ 3 4 5] [ 4 5 6] [ 5 6 7] [ 6 7 8] [ 7 8 9] [ 8 9 10]]
你可以直接通过索引访问目标窗口,比如例子中[4,5,6]对应windows[3],[5,6,7]对应windows[4],遍历即可完成迭代需求。
内容的提问来源于stack exchange,提问作者Thomas Hemming Larsen
相关产品推荐
相关产品推荐

