Reading A File With Fortran Formatted Small Floats, Using Numpy
I am trying to read a data file written by a Fortran program, in which every once in a while there is a very small float like 0.3299880-104. The error message is: >np.loadtxt(fi
Solution 1:
As @agentp mentioned in the comments, one approach would be to use the converters=
argument to np.genfromtxt
to insert the e
characters before casting to float:
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])
Post a Comment for "Reading A File With Fortran Formatted Small Floats, Using Numpy"