快速将 numpy 数组加载到 Fortran 中
Loading numpy arrays into Fortran quickly
我目前正在开发一个 Fortran 程序,它需要一个大数据文件作为输入。此数据文件是使用 Python 创建的,我目前正在使用 np.savetxt()
函数将其保存为人类可读的格式。
然而,这个文件的大小非常大(至少1.5GB的磁盘space),所以读取文件需要很长时间。我认为使用 np.save
(或者 pickle 它?)以二进制格式保存数据数组可能更容易,但是我不知道如何将这个文件读入我的 Fortran 程序 - 有没有一个简单的如何做到这一点?
我意识到另一种解决方案是完全删除 Python 并在 Fortran 中创建数据数组,但是由于我接近 Fortran 的完全初学者,我正在尝试尽量减少我需要它做的事情。
在我的日常工作中,为了计算和可视化目的,我 运行 在 Fortran 和 python 之间进行了非常大的模拟切换。我建议在这两个系统中都使用 netcdf 库,netcdf 是一种在两个系统之间传输并控制文件大小的优秀格式。下面提供了一些很好的链接
Python : http://unidata.github.io/netcdf4-python/
语言:http://www.unidata.ucar.edu/software/netcdf/examples/programs/
这取决于你的数据结构,但如果它只是一个或几个数组,你不需要任何外部库(我对 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
仅此而已。
我目前正在开发一个 Fortran 程序,它需要一个大数据文件作为输入。此数据文件是使用 Python 创建的,我目前正在使用 np.savetxt()
函数将其保存为人类可读的格式。
然而,这个文件的大小非常大(至少1.5GB的磁盘space),所以读取文件需要很长时间。我认为使用 np.save
(或者 pickle 它?)以二进制格式保存数据数组可能更容易,但是我不知道如何将这个文件读入我的 Fortran 程序 - 有没有一个简单的如何做到这一点?
我意识到另一种解决方案是完全删除 Python 并在 Fortran 中创建数据数组,但是由于我接近 Fortran 的完全初学者,我正在尝试尽量减少我需要它做的事情。
在我的日常工作中,为了计算和可视化目的,我 运行 在 Fortran 和 python 之间进行了非常大的模拟切换。我建议在这两个系统中都使用 netcdf 库,netcdf 是一种在两个系统之间传输并控制文件大小的优秀格式。下面提供了一些很好的链接
Python : http://unidata.github.io/netcdf4-python/
语言:http://www.unidata.ucar.edu/software/netcdf/examples/programs/
这取决于你的数据结构,但如果它只是一个或几个数组,你不需要任何外部库(我对 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
仅此而已。