如何提取x_arr、y_arr中height_arr各元素前后各20个对应数据点
你的代码存在3个核心问题
- 逻辑完全偏离需求:你写的
section_x_arr > height_list[i][0]是把整个x数组和单个极小值x做比较,返回的是全数组布尔值,完全不是在定位目标点的位置,section_y_arr < height_list[i][1]的判断逻辑也和你要拿前后20个点的需求毫无关联。 - 缺少核心的定位步骤:你没有先找到每个极小值点在x_arr、y_arr中对应的索引位置,自然无法提取前后区间的数据。
- 变量名不对应:你描述中用到的数组名是x_arr、y_arr、height_arr,代码里写的是section_x_arr、section_y_arr、height_list,变量不匹配会导致取值错误。
正确实现方案
你需要先定位每个极小值点在原数组中的索引,再按窗口大小切片取前后20个点即可,注意做边界溢出处理。以下是基于numpy的实现代码:
import numpy as np transit_curves = [] window = 20 arr_length = len(x_arr) for target_x, target_y in height_arr: # 定位目标极小值的索引,浮点数场景用np.isclose替代==避免精度误差 pos = np.where((x_arr == target_x) & (y_arr == target_y))[0][0] # 计算切片边界,避免索引越界 start_idx = max(0, pos - window) end_idx = min(arr_length, pos + window + 1) # 提取窗口内的x、y数据 transit_curves.append([x_arr[start_idx:end_idx], y_arr[start_idx:end_idx]]) # 输出验证第一个结果 print(transit_curves[0])
如果你的极小值点存在重复匹配到多个索引的情况,按需调整np.where返回结果的取数逻辑即可。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

