LiDAR高程GeoTIFF嵌套列表值修改异常排查求助
LiDAR高程地图数据处理异常排查方案
1. 验证数据结构的规整性
小型测试用的是手动构造的标准嵌套列表,但从GeoTIFF转来的numpy数组转列表后,可能存在子列表长度不一致的情况:
- 先打印原numpy数组的形状:
print(liidar_array.shape),确认是规整的二维数组(格式应为 (行高, 列宽)) - 随机抽取几个中间子列表,打印长度:
print(len(nested_list[5]), len(nested_list[10])),对比首尾子列表长度是否一致
如果存在长度不一致的子列表,循环里的range(1, len(sublist)-1)会因长度不足3生成空序列,导致该行看似未跳过首元素(实际无元素被处理)。
2. 修正循环的边界判断逻辑
针对可能的不规则子列表,先判断长度再处理,避免索引越界或误处理:
# 跳过首尾子列表 for sublist in nested_list[1:-1]: # 子列表长度不足3时直接跳过 if len(sublist) < 3: continue # 跳过子列表首尾元素,处理中间部分 for idx in range(1, len(sublist)-1): if 你的条件判断: sublist[idx] += 100
3. 排查列表转换的拷贝问题
如果是手动循环将numpy数组转为嵌套列表(比如[list(row) for row in liidar_array]),可能存在隐性的浅拷贝问题,导致元素修改异常。建议直接使用numpy内置的深拷贝转换:
nested_list = liidar_array.tolist()
4. 打印日志定位误处理元素
添加日志打印,直观看到哪些元素被处理,确认是否真的误处理了首元素:
for row_idx, sublist in enumerate(nested_list[1:-1], start=1): for elem_idx, val in enumerate(sublist): if 1 <= elem_idx <= len(sublist)-2: print(f"处理行{row_idx},元素索引{elem_idx},原值{val}") if 你的条件判断: sublist[elem_idx] += 100
通过日志可以明确是否是索引逻辑错误,还是条件判断意外命中了非目标元素。
内容的提问来源于stack exchange,提问作者Patstro
相关产品推荐
相关产品推荐

