Python v2将科学记数法从字符串转换为浮点值 - 值正在发生变化

时间:2018-03-26 06:23:44

标签: python string floating-point scientific-notation

我正在使用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时,有人可以解释为什么值会发生变化吗?

0 个答案:

没有答案