我正在使用Python生成一些初始数据,以2D数组的形式呈现,例如“X”,然后使用Fortran对它们进行一些计算。最初,当数组大小约为10,000 x 10,000时,np.savetxt在速度方面表现良好。但是,一旦我开始增加数组的维数,savetxt的速度就会显着变慢。因此,我尝试了np.save,并且这样保存速度更快,但文件以.npy格式保存。如何在Fortran中读取这样的文件以重构原始数组?从我所了解的情况来看,二进制通常可以实现最低的空间消耗和最快的速度。
在Fortran 90中,
我收到了以下错误信息:Fortran运行时错误:列表输入项1中的实数有误。
编辑: 在Python中,我这样做,
然后在Fortran中,我这样做:
输出以1.8758506894003703E-309,1.1711999948023422E+171,5.2274167985502976E-037,8.4474009688929314E+252,2.6514123210345660E+180,9.9215260506210473E+247,2.1620996769994603E+233,7.5805790251297605E-096,3.4756671925988047E-152,6.5549091408576423E-260,-50.000000000000000,-38.888888888888886,-27.777777777777779等内容开头。只有使用.bin格式时才不会出现此错误,而使用np.save则会导致npy格式。
在Fortran 90中,
open(10,file='/home/X.npy')
read(10,*)X
我收到了以下错误信息:Fortran运行时错误:列表输入项1中的实数有误。
编辑: 在Python中,我这样做,
import numpy as np
x = np.linspace(-50,50,10)
y = np.linspace(-50,50,10)
X,Y = np.meshgrid(x,y)
np.save('X',X)
然后在Fortran中,我这样做:
program read_unformatted_binary_from_python
use iso_c_binding
implicit none
integer, parameter :: DPR = selected_real_kind(p=15)
character(len=*), parameter :: filename = 'X.npy'
integer, parameter :: N = 10
real(DPR), allocatable, dimension(:, :) :: X
allocate(X(N, N))
open(40, file=filename, status='old', access='stream', form='unformatted')
read(40) X
close(40)
write(*,*) X
end program read_unformatted_binary_from_python
输出以1.8758506894003703E-309,1.1711999948023422E+171,5.2274167985502976E-037,8.4474009688929314E+252,2.6514123210345660E+180,9.9215260506210473E+247,2.1620996769994603E+233,7.5805790251297605E-096,3.4756671925988047E-152,6.5549091408576423E-260,-50.000000000000000,-38.888888888888886,-27.777777777777779等内容开头。只有使用.bin格式时才不会出现此错误,而使用np.save则会导致npy格式。