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

基于距离数组阈值对索引数组分块取最大值替换的问题排查

问题描述

现有两个数组:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:55:21