我正在使用Python 2.7.11,我有一个文本文件,其x,y,z值表示栅格中的值(lon,lat,value)。
我正在尝试将此文件导入到numpy数组中,因此我可以继续使用现有的python代码处理它,但是在从字符串转换为科学记数法时遇到问题。
x,y,z = [], [], []
f = open(xyz_file, 'r')
for l in f:
row = l.split()
x.append(row[0])
y.append(row[1])
z.append(row[2])
这导致z列表包含科学记数法的字符串:
['8.23984e+05',
'3.85186e-34',
'2.31061e+06',
'0.00000e+00',
'9.86076e-32',
'0.00000e+00', etc.
此列表中的最小 - 最大值为:
-1.00000e+00
nan
如果我创建数组,则会收到错误:
A = np.array((x, y, z), dtype=float)
ValueError Traceback (most recent call last)
<ipython-input-7-3e00a73369e4> in <module>()
----> 1 A = np.array((x, y, z))
ValueError: setting an array element with a sequence
我认为科学记谱法可能存在问题,因此我将其转换为:
z3 = []
rows = len(z)
for i in range(0, rows):
val = float(z[i])
z3.append(val)
此列表中的最小 - 最大值现在与上述不同:
-3.40281e+38
3.40282e+38
我检查了删除'nan'值是否有帮助,最初的min-max值是:
z2 = [x for x in z if str(x) != 'nan']
-1.00000e+00
9.99999e-34
当我将此列表转换为float时,我得到相同的错误最小值:
z4 = []
rows2 = len(z2)
for i in range(0, rows2):
val = float(z2[i])
z4.append(val)
-3.40281e+38
3.40282e+38
当我从string转换为float时,有人可以解释为什么值会发生变化吗?