我正在尝试读取一个标题为整数的fortran文件,然后将实际数据作为32位浮点数。使用numpy的fromfile('mydatafile', dtype=np.float32)
它将整个文件作为float32读入,但我需要在int32中为我的输出文件添加标题。使用scipy的FortranFile读取头文件:
f = FortranFile('mydatafile', 'r')
headers = f.read_ints(dtype=np.int32)
但是当我这样做时:
data = f.read_reals(dtype=np.float32)
它返回一个空数组。我知道它不应该是空的,因为使用numpy的fromfile它会读取所有数据。奇怪的是,scipy方法适用于我的数据集中的其他文件,但不适用于此。也许我不理解numpy和scipy这两种读取方法中的每一种之间的区别。当使用任一方法读入文件时,有没有办法隔离标题(dtype=np.int32
)和数据(dtype=np.float32
)?
答案 0 :(得分:4)
np.fromfile采用“count”参数,该参数指定要读取的项目数。如果您事先知道标头中的整数数量,那么在没有任何类型转换的情况下执行所需操作的简单方法就是将标头读取为整数,然后将其余部分作为浮点数读取:
NaN
答案 1 :(得分:0)
fortranfile
包与struct
结合使用。这两种方式都不是理想的,但后来也不是scipy FortranFile
。
至少这样你可以阅读混合型数据。这是一个例子:
from fortranfile import FortranFile
from struct import unpack
with FortranFile(to_open) as fh:
dat = fh.readRecord()
val_list = unpack('=4i20d'.format(ln), dat)
您可以使用pip install fortranfile
进行安装。 struct
是标准的,(联合国)包格式为here。