我正在尝试读取一个包含整数头部和实际数据为32位浮点数的Fortran文件。使用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
)?
'float32'
,然后使用data[:n].view(np.int32)
将对应于头部的部分转换为np.int32
类型。其中n
是头部元素的数量。 - rthFortranFile
用于处理 Fortran 的“非格式化”二进制文件。尽管被称为“非格式化”,但这些文件将数据存储为记录,每个记录由一个标头指示的项目数,接着是项目数据本身,然后是第二份标头。另一方面,numpy.fromfile
用于处理没有任何尾部/标头的原始二进制数据。Fortran 也可以以此格式输出文件(取决于OPEN
语句的参数)。因此,您需要知道您有哪种文件格式,并使用两种方法中的正确方法;使用错误的方法会导致错误的数据。 - pv.