NPE*_*NPE 8 python performance numpy scipy large-files
我有一个二进制文件,其中包含n*m
32位浮点的密集矩阵.将它读入Fortran排序的numpy
数组的最有效方法是什么?
该文件的大小为数千兆字节.我控制格式,但它必须是紧凑的(即大约4*n*m
字节长度),并且必须易于从非Python代码生成.
编辑:该方法必须直接生成Fortran排序矩阵(由于数据的大小,我无法创建C有序矩阵,然后将其转换为单独的Fortran排序副本.)
Sve*_*ach 12
NumPy提供fromfile()
读取二进制数据.
a = numpy.fromfile("filename", dtype=numpy.float32)
Run Code Online (Sandbox Code Playgroud)
将创建一个包含您的数据的一维数组.要将其作为二维Fortran排序n x m
矩阵进行访问,您可以对其进行整形:
a = a.reshape((n, m), order="FORTRAN")
Run Code Online (Sandbox Code Playgroud)
[编辑:reshape()
在这种情况下实际上复制数据(请参阅注释).要做到这一点,不要使用cpoying,请使用
a = a.reshape((m, n)).T
Run Code Online (Sandbox Code Playgroud)
感谢Joe Kingtion指出这一点.]
但说实话,如果你的矩阵有几千兆字节,我会选择像h5py或PyTables这样的HDF5工具.这两个工具都有FAQ条目,将工具与另一个工具进行比较.我通常更喜欢h5py,虽然PyTables似乎更常用(两个项目的范围略有不同).
HDF5文件可以使用数据分析中使用的大多数编程语言编写.链接的维基百科文章中的接口列表不完整,例如还有一个R接口.但实际上我不知道你想用哪种语言写数据......