我有一个我创建的数组,其大小为:256 ^ 3.
real*8, dimension(256,256,256) :: dense
open(unit=8,file=fname,form="unformatted")
write(8)dense(:,:,:)
close(8)
写出来的最佳方法是什么,所以Matlab可以读取它?我有一些我想要使用的后期处理。
我正在使用gfortran所以我不能使用二进制格式:{这是真的吗?我将表单设置为“二进制”,但它无法识别它。我也没有安装ifort。
答案 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脚本中读取它。