2016-08-04 62 views
2

我目前正在研究一个Fortran程序,它需要一个大型的数据文件作为输入。这个数据文件是使用Python创建的,我现在使用np.savetxt()函数将它保存为一个可读的格式。将numpy数组快速加载到Fortran中

但是,此文件的大小非常大(至少1.5GB的磁盘空间),因此在文件中读取需要很长时间。我认为使用np.save(或者pickle它)可以更容易地以二进制格式保存数据数组,但是我不知道如何将该文件读入我的Fortran程序 - 是否有一种简单的方法可以执行此操作?

我意识到,一个替代解决方案将完全切割出来的图片和在Fortran中创建数据数组,但是因为我接近一个完整的初学者在Fortran我想尽量减少事物的数量我需要它。

回答

6

这取决于你的数据结构,但如果它只是一个或几个阵列,你不需要任何外部库(我对NetCDF的所有麻烦都没有留下深刻的印象)。

import numpy as np 
a = np.zeros([10,10], order="F") 
a.tofile("a.bin") 

use iso_fortran_env 
    real(real64) :: a(10,10) 

    open(newunit=iu,file="a.bin",access="stream",status="old",action="read") 
    read(iu) a 
    close(iu) 
end 

,这一切。

+0

不应该转储数组'a'的转置,即'a.T.tofile(“a.bin”)'? – ziky

+0

你为什么这么认为?当然不。注意F顺序。 –

+0

哈,你说得对。我使用'pandas.read_csv'加载数据,必须在转储之前对其进行转置。谢谢。 – ziky