基于距离数组阈值对索引数组分块取最大值替换的问题排查
问题描述
现有两个数组:
tmp_data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] dist_data = [15.625, 46.875, 78.125, 109.375, 140.625, 171.875, 203.125, 234.375, 265.625, 296.875]
需求:设置距离阈值100,按每100距离单位对数据分块,将每个块内tmp_data的所有元素替换为该块的最大值,预期输出为max_tmp_data_100 = [2,2,2,5,5,5,8,8,8,9]。
自行编写的Python代码如下:
# Initialize final_array = [] d_array = [] idx = 1 for i in range(0,10): if dist_data[i] < idx * final_res: d_array.append(tmp_data[i]) elif dist_data[i] > idx * final_res: # Now get the values max_val = np.amax(d_array) new_array = np.ones(len(d_array)) * max_val final_array.extend(new_array) idx = idx + 1
但代码输出为[2.0, 2.0, 2.0, 5.0, 5.0, 5.0, 5.0, 5.0],与预期不符,需排查问题。
问题排查与修复
存在的问题
- 未定义变量:代码中使用了
final_res但未赋值,应设置为阈值100。 - 边界条件缺失:
- 未处理
dist_data[i] == idx * final_res的情况,导致这类元素被遗漏。 - 循环结束后,最后一块未处理的
d_array数据没有加入到final_array中。
- 未处理
- 逻辑错误:当
dist_data[i] > idx * final_res时,当前元素未加入d_array就切换块,导致该元素被遗漏,后续块的处理也出现偏差。
修复后的代码
import numpy as np tmp_data = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] dist_data = [15.625, 46.875, 78.125, 109.375, 140.625, 171.875, 203.125, 234.375, 265.625, 296.875] final_res = 100 # 定义距离阈值 final_array = [] d_array = [] idx = 1 for num, dist in zip(tmp_data, dist_data): if dist < idx * final_res: d_array.append(num) else: # 处理当前块,将所有元素替换为块内最大值 max_val = np.amax(d_array) final_array.extend([max_val] * len(d_array)) # 初始化下一块,将当前元素加入新块 d_array = [num] idx += 1 # 循环结束后处理最后剩余的块 if d_array: max_val = np.amax(d_array) final_array.extend([max_val] * len(d_array)) # 转换为整数列表匹配预期输出格式 max_tmp_data_100 = [int(x) for x in final_array] print(max_tmp_data_100)
输出结果
[2, 2, 2, 5, 5, 5, 8, 8, 8, 9],与预期一致。
内容的提问来源于stack exchange,提问作者Miss_Orchid
相关产品推荐
相关产品推荐

