【发布时间】:2018-04-26 02:21:21
【问题描述】:
我正在使用 Fortran 中的旧有限元代码。这是大学的一个研究项目。
我有一个 .raw 文件,它表示 3D 图像。
.raw文件中的数据存储在uint16或uint8中,整数个数是已知的。 p>
如何在 Fortran 程序中将此图像读取到整数数组中?
类似的东西
allocate(imgarray(total_int))
call raw2array(filename,imgarray)
我目前正在使用 python 来读取图像,并将其转换为整数向量。这个向量是在 Fortran 中用一个文本文件读取的。
在 python 中
imgarray = np.fromfile(fid, dtype=np.uint16,count=total_int,sep='')
但是当读取超过 1000x1000x1000 个整数的文件时,这个过程会变得非常缓慢。
该项目要求图像 .raw 以二进制形式读取,在 Fortran 程序中作为完成向量的子例程。
如何读取这个图像(二进制)并使用 Fortran 中的子程序将其转换为整数向量?
【问题讨论】:
-
但是当读取超过 1000x1000x1000 整数的文件时,这个过程会变得非常慢。我严重怀疑在 Fortran 中读取会更快。
-
你有什么尝试吗?你有我们可以构建的代码吗?文件是 Fortran 顺序还是 C 顺序?了解 Fortran 中的 流 访问。
-
@VladimirF 其实代码在F90,我错了,因为我看到程序是用gfortran编译的,用mpi77链接的。代码的非并行版本在F77中。
-
不要发布任何链接,这里显示相关代码。您有没有做任何事情,或者您只是想从我们这里获得完整的解决方案?您知道一般如何从 Fortran 中的外部文件中读取数据吗?您需要在此处获得 stream 访问权限。然后它可以是单个
read语句。试着自己做点什么。作为流打开并执行read(unit) imgarray。报告发生了什么。 -
@VladimirF 感谢您的指导。我不希望任何人提供完整的解决方案。