【发布时间】:2017-05-01 01:05:44
【问题描述】:
我正在以 NxMxL 矩阵的二进制格式编写输出 Fortran 数据,如下所示
open(94, file = 'mean_flow_sp.dat', status = 'replace', action = 'write', form = 'unformatted')
do k = 0,L-1
do j = 0,M-1
do i = 0,N-1
write(94) u(i,j,k), v(i,j,k), w(i,j,k)
enddo
enddo
enddo
close(94)
其中u, v, w 是分配为例如单精度值u(0:N-1,0:M-1,0:L-1)。然后我在Python中读取输出文件如下
f = open('mean_flow_sp.dat', 'rb')
data = np.fromfile(file=f, dtype=np.single).reshape(N,M,L)
f.close()
我注意到的第一件奇怪的事情是输出 Fortran 文件的长度为 10,066,329,600 字节(这是使用 L = 640,M = 512,N = 1536)。所以问题是为什么这个文件不是 1536*512*640*3(variables)*4(bytes) = 6,039,797,760 字节长?
显然,Python 脚本在尝试重塑读取数据时抛出一个错误,因为它的大小不是 NxLxM x3(单精度)。
为什么输出文件这么大?
【问题讨论】:
-
您的编译器可能正在为每条写入的记录添加页眉/页脚数据,而您没有考虑到这些数据。您可以搜索与您的设置相对应的其他问题,也可以查看使用流输出。
-
谢谢,稍后我意识到这一点并发布了答案。