Arrays 从fortran中写出256^3数组以便matlab读取的最佳方法

Arrays 从fortran中写出256^3数组以便matlab读取的最佳方法,arrays,matlab,fortran,gfortran,Arrays,Matlab,Fortran,Gfortran,我创建了一个数组,大小为:256^3 real*8, dimension(256,256,256) :: dense open(unit=8,file=fname,form="unformatted") write(8)dense(:,:,:) close(8) 写出来让Matlab阅读的最好方法是什么?我想使用一些后期处理 我正在使用gfortran,因此无法使用二进制格式:{这是真的吗?我将表单设置为“二进制”,但它无法识别它。我也没有安装ifort。使用无格式流访问写入数组。流访问是二

我创建了一个数组,大小为:256^3

real*8, dimension(256,256,256) :: dense

open(unit=8,file=fname,form="unformatted")
write(8)dense(:,:,:)
close(8)
写出来让Matlab阅读的最好方法是什么?我想使用一些后期处理


我正在使用gfortran,因此无法使用二进制格式:{这是真的吗?我将表单设置为“二进制”,但它无法识别它。我也没有安装ifort。

使用无格式流访问写入数组。流访问是二进制的标准等价物。从IRO bot的答案中窃取:

real(kind=kind(0.0d0)),dimension(256,256,256) :: dense

open(unit=8,file='test.dat',& ! Unformatted file, stream access
  form='unformatted',access='stream')
write(unit=8) dense           ! Write array
close(unit=8)
end

这很可能足以满足您的需要。不过,请注意,对于更复杂或更复杂的输出要求,Matlab提供了一个例程库,可从编译语言调用,允许您编写.mat文件。还存在其他库,可以促进这种数据传输,例如HDF5

是的,您可以使用IanH建议的
stream
access或
direct
access写入二进制文件:

integer :: reclen
real(kind=kind(0.0d0)),dimension(256,256,256) :: dense

inquire(iolength=reclen)dense ! Inquire record length of the array dense
open(unit=8,file='test.dat',& ! Binary file, direct access
     form='unformatted',access='direct',recl=reclen)
write(unit=8,rec=1)dense      ! Write array into first record 
close(unit=8)

end

除非在
open
语句中指定
access
属性,否则文件将以
sequential
模式打开,这可能不便于读取,因为它会在包含记录长度信息的每条记录中添加填充。通过使用
direct
access,您可以指定记录长度h显式地,在本例中,所写文件的大小正好是
8*256^3
,因此假设您知道数组顺序和尾数,您可以从MATLAB脚本中读取它。

我说的是MATLAB,但不是Fortran。您可以编写的最节省空间的文件格式是什么?我们可能可以让MATLAB读取它。谢谢非常好。写出来的过程似乎进行得很顺利。就读入而言,什么是最好的fopen过程?类似于:fid=fopen(文件名,'rb');mesh=fread(fid,ndimndim,'double');fclose(fid);谢谢!我不懂MATLAB,但在快速查看之后,您的代码片段看起来是正确的。我想这将使您获得长度为ndim^3的一维数组,因此您可能希望将其重新整形为(ndim,ndim,ndim)。请注意,不能保证您不会使用直接访问(取决于处理器)将填充或某种记录标记写入文件。无可否认,在引入流访问之前,这是最有可能让事情正常运行的方法。@IanH最新标准草案第9.6.4.5.2节描述了如何做到这一点。f写入的ile存储单元完全由RECL和写入的记录数决定。然而,文件存储单元的大小取决于编译器,这就是为什么我们使用INQUIRE语句。但这里绝对没有填充,不是标准,也不是我使用过的任何主要编译器实现(gfortran、Intel、PGI)。请告诉我们您是否知道。注意,我们在这里讨论的是记录的磁盘表示。9.1p4明确允许处理器依赖于记录文件(直接或顺序)的外观,如果它们可以作为流打开(这是C/Matlab查看文件的方式)-基本上,这允许处理器向Fortran程序不可见的文件写入额外的簿记信息。如果选择-vms兼容性选项,ifort文档中会提到此选项的一个用途。可能与当前处理器一起工作-是。保证工作-否。您能提供任何代码来完成此操作吗?除了谢谢你的帮助。