我正在尝试读取由 Fortran 程序编写的数据文件,其中每隔一段时间就会出现一个非常小的 float ,例如 0.3299880-104
。错误信息是:
>np.loadtxt(filename, usecols = (1,))
File "/home/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.py", line 928, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
File "/home/anaconda2/lib/python2.7/site-packages/numpy/lib/npyio.py", line 659, in floatconv
return float(x)
ValueError: invalid literal for float(): 0.3299880-104
我可以做些什么来让 Numpy 能够读取这个数据文件吗?
最佳答案
正如@agentp在评论中提到的,一种方法是使用 np.genfromtxt
的 converters=
参数。在转换为 float 之前插入 e
字符:
import numpy as np
# some example strings
strings = "0.3299880-104 0.3299880+104 0.3299880"
# create a "dummy file" (see http://stackoverflow.com/a/11970414/1461210)
try:
from StringIO import StringIO # Python2
f = StringIO(strings)
except ImportError:
from io import BytesIO # Python3
f = BytesIO(strings.encode())
c = lambda s: float(s.decode().replace('+', 'e').replace('-', 'e-'))
data = np.genfromtxt(f, converters=dict(zip(range(3), [c]*3)))
print(repr(data))
# array([ 3.29988000e-105, 3.29988000e+103, 3.29988000e-001])
关于python - 使用 numpy 读取 Fortran 格式的小 float 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34545060/