从fortran写出256 ^ 3数组的最佳方法,所以matlab可以读取它

时间:2012-12-07 04:09:45

标签: 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。

2 个答案:

答案 0 :(得分:3)

使用未格式化的流访问将数组写出。流访问是二进制的标准等价物。从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。

答案 1 :(得分:0)

是的,您可以使用IanH建议的stream访问权限或direct访问权限来编写二进制文件:

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

除非您在access语句中指定open属性,否则该文件将以sequential模式打开,这可能不方便阅读,因为它为每个记录添加了一个填充有关记录长度的信息。通过使用direct访问,您可以明确指定记录长度,在这种情况下,写入的文件的大小将精确8*256^3,因此假设您知道数组排序和字节顺序,能够从您的MATLAB脚本中读取它。