2017-06-22 90 views
0

我使用ndarray.tobytes(order='F')在Python中保存了矩阵。在Fortran中阅读在Python中使用tobytes保存的矩阵

f_mat = open('mat.dat', 'wb') 
f_mat.write(matrix.tobytes('F')) 
f_mat.close() 

在Fortran中是否有快速读取它的方法,或者我应该做一个for循环并找出元素的顺序?

+0

对不起,但在Fortran(至少比较老的)中,如果你使用二进制,你真的需要知道字节记录的大小以及你写数据的顺序。 – 098799

+0

不一定是记录,但你应该知道你实际在读什么。字节意味着什么。如果你知道大小和类型,它应该只是一个读取语句。 –

+0

是的,这就是我要找的。我知道我的矩阵是一个3600 x 7200的矩阵,在python中有浮点数。然而,我不知道如何告诉Fortran从二进制文件读取矩阵......我总是每次使用一个变量的读取语句,如 (10,END = 999,ERR = 1000)realvalue – spec3

回答

2

如果你知道的大小(n时间m)和数组的类型,并相应地把它声明:

!just an example 
real(c_double), allocatable :: mat(:,:) 
allocate(mat(n,m)) 

应该只是

open(newunit = u, file='mat.dat', access='stream', form='unformatted', status='old', action='read') 
read(u) mat 
close(u) 

的参数openaccess='stream'后的可选的。