python - 使用 numpy 读取 Fortran 格式的小 float 文件

标签 python numpy floating-point fortran

我正在尝试读取由 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.genfromtxtconverters= 参数。在转换为 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/

相关文章:

python - 为什么 Pygame 应用程序在启动时卡住?

python - 如何查询 sql server 表的新行以更新整个表的结果

在 C 中比较 ASCII 字符串的数值

python - 如何减少 numpy 数组的维度,然后从末尾修剪一些?

Python - 系统错误 : NULL result without error in PyObject call

c++ - 长双 vs 双

java - 不进行任何舍入,最多保留 3 位小数

python - 替换 Python 列表中的选定元素

python - 无法定义名称 "userInput"

python - 如何在不先构建列表的情况下创建对象的 numpy 数组?