【问题标题】:Fortran binary output bigger than expected [duplicate]Fortran二进制输出大于预期[重复]
【发布时间】: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(单精度)。

为什么输出文件这么大?

【问题讨论】:

  • 您的编译器可能正在为每条写入的记录添加页眉/页脚数据,而您没有考虑到这些数据。您可以搜索与您的设置相对应的其他问题,也可以查看使用流输出。
  • 谢谢,稍后我意识到这一点并发布了答案。

标签: python io fortran


【解决方案1】:

好的,所以我刚刚意识到,正如here 发布的那样,“Fortran 编译器通常在记录的开头和结尾写入记录的长度。”,然后输出文件的大小检查出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2020-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多