You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于起始位置和反向偏移量对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 19:57:18