Python字典向列表追加值时仅k20正常其余返回nan如何解决?
问题原因
- 核心问题是
get_probe_pts函数直接原地修改了传入的surf_data(也就是每次循环读入的data数组):你在函数内直接覆盖了surf_data[:, 0]的值,第一次循环处理键k20时就已经把原始读入的data的第0列修改为缩放后的值,后续处理同个data的其他键时,用的已经是被篡改的非原始数据,导致prom_loc_min、prom_loc_max的计算逻辑不符合预期,筛选出的data_probe为空,np.average对空数组计算就会返回nan。 - 分开循环的写法之所以正常,是因为每个键的处理都重新读入了原始的
data,不会被上一次的修改影响。
修复方案
最稳妥的修复方式是修改get_probe_pts函数,避免原地修改输入数组,先拷贝再操作:
def get_probe_pts(surf_data, probe_loc): # 拷贝数组,不修改原始输入 surf_data = surf_data.copy() rescale_x = surf_data[:, 0] - np.min(surf_data[:, 0]) surf_data[:, 0] = rescale_x / (5 * 101.6) prom_loc_min = probe_loc - (surf_data[1, 0] - surf_data[0, 0]) * 0.5 prom_loc_max = probe_loc + (surf_data[1, 0] - surf_data[0, 0]) * 0.5 data_probe = surf_data[np.logical_and(surf_data[:, 0] > prom_loc_min, surf_data[:, 0] < prom_loc_max)] return np.average(data_probe, axis=0)
修改后原有循环逻辑不需要做任何调整即可正常运行。
内容的提问来源于stack exchange,提问作者nhm
相关产品推荐
相关产品推荐

