398 words
2 minutes
将Fortran中的数组与矩阵保存为numpy中的.npz文件
我们之前讨论过如何用python在三维矩阵中切片,在Python中保存三维矩阵和它的三个坐标轴的方法有用numpy.savez
将数组和矩阵用不同的键值对保存至一个.npz
文件。这里将讨论如何用Fortran实现这一过程。
NPY-for-Fortran:npy
文件的Fortran接口
Waiting for api.github.com...
NPY-for-Fortran为Fortran提供了npy
和npz
的接口模块。我们在Fortran中将多种精度的intger
, real
和cmplx
的一维或多维数组保存至npy
或npz
文件。
先将仓库克隆至本地
git clone https://github.com/xumi1993/NPY-for-Fortran.git
然后复制src/npy.f90
到任意可调用的路径。
调用NPY-for-Fortran
Fortran程序实例
这里我们定义一个三维矩阵mtx
,和它的三个坐标轴x
、y
和z
,然后将他们保存在一个npz
文件里
program main use m_npy
integer :: i,j,k real(8) :: mtx(9,10,11), z(9), y(10), x(11) character(len=10) :: fname
fname = 'test.npz' do i=1,9 z(i) = i*0.3 do j=1,10 y(i) = i*0.4 do k=1,11 x(j) = j *0.5 mtx(i,j,k) = 20*i**2 + 100*j + k enddo enddo enddo
call add_npz(fname, 'x', x) call add_npz(fname, 'y', y) call add_npz(fname, 'z', z) call add_npz(fname, 'mtx', mtx)
end program
编译
由于npy.f90
是一个Fortran模块,所以要先编译这个模块,生成.mod
文件,再编译上面这个主程序
gfortran npy.f90 -cgfortran example.f90 npy.f90 -o example_npz
其中example.f90
是上述主程序。
运行
运行程序后会生成一个test.npz
文件。
./example_npz
在Python中查看
用numpy.load
即可打开npz
文件并在Python脚本中调用其数值。
import numpy as npdata = np.load('test.npz')print(data.__dict__)
结果为
{'_files': ['x.npy', 'y.npy', 'z.npy', 'mtx.npy'], 'files': ['x', 'y', 'z', 'mtx'], 'allow_pickle': False, 'pickle_kwargs': {'encoding': 'ASCII', 'fix_imports': True}, 'zip': <zipfile.ZipFile file=<_io.BufferedReader name='test.npz'> mode='r'>, 'f': <numpy.lib.npyio.BagObj at 0x7fc3b819c4c0>, 'fid': <_io.BufferedReader name='test.npz'>}
将Fortran中的数组与矩阵保存为numpy中的.npz文件
https://fuwari.vercel.app/posts/npyfor/