Python按条件校正数组经度值并保存输出的问题求解
问题原因
- 核心逻辑错误:遍历温度数组的每个值时,每次都对整个经度数组做整体赋值,最终
lons2的取值完全由最后一行的温度值决定,完全没有实现逐行判断、逐行校正的需求。你给出的样例数据最后一行温度为248.11>220,所以最终所有行的校正经度都和原经度一致,和预期效果不符。 - 冗余循环:numpy自带向量化操作能力,无需手动写循环遍历数组,手动循环不仅代码冗余,还很容易出现逻辑错误。
修正代码(推荐向量化写法,效率更高)
import numpy as np # 读取原始数据 data = np.loadtxt('Data.dat') lats = data[:, 0] lons = data[:, 1] tirs = data[:, 2] # 批量计算校正后经度 lons2 = lons.copy() # 仅筛选温度小于220的行,对应经度加0.05 lons2[tirs < 220] += 0.05 # 拼接四列数据并保存 data_new = np.column_stack([lats, lons, tirs, lons2]) np.savetxt('Data_New.dat', data_new, fmt='%9.3f')
原循环写法的修正方案(仅做逻辑演示,不推荐使用)
如果你一定要保留循环写法,可以改为按索引遍历逐行修改:
import numpy as np data = np.loadtxt('Data.dat') lats = data[:, 0] lons = data[:, 1] tirs = data[:, 2] lons2 = lons.copy() # 按索引逐行判断 for idx in range(len(tirs)): if tirs[idx] < 220: lons2[idx] += 0.05 data_new = np.column_stack([lats, lons, tirs, lons2]) np.savetxt('Data_New.dat', data_new, fmt='%9.3f')
内容的提问来源于stack exchange,提问作者Azam
相关产品推荐
相关产品推荐

