我刚刚写了一个文件:
real*8 :: vol_cel
real*8, dimension(256,256,256) :: dense
[... some operations]
open(unit=8,file=fname,form="unformatted")
write(8)dense(:,:,:)/vol_cell
close(8)
我在 Matlab 中阅读的代码:
fid = fopen(fname,'r');
mesh_raw = fread(fid,256*256*256,'double');
fclose(fid);
最小值和最大值清楚地表明它没有正确读取(最小值为 0,最大值为较大的正实数 *8)。
min =
3.3622e+38
max =
-3.3661e+38
我需要在 Matlab 中设置什么精度才能使其在未格式化的 Fortran 文件中读取?
一个有点相关的问题:我正在使用的这个 Matlab 代码可以读取二进制文件,但不能读取未格式化的文件。虽然我正在使用 gfortran 在我的 Mac OSX 上生成这些新数据。它不识别 form="binary" 所以我不能那样做。我需要添加一些库还是这是一个字节序问题?
===== 进展 =====
好的进展。而不是我的 ndim*ndim*ndim 矩阵,我只是这样写出 x 值(列向量):
open(unit=8,file=fnamex,form="unformatted")
write(8)x0
close(8)
然后Matlab读取:
fid = fopen(nfilename,'r');
hr3=fread(fid, 1, 'int32');
x0 = fread(fid,Ntot,'float32');
hr4=fread(fid, 1, 'int32');
fclose(fid);
那行得通。然后我尝试了原始的 ndim**3 矩阵,我尝试阅读:
fid = fopen(nfilename,'r');
hr3=fread(fid, 1, 'int32');
mesh_raw = fread(fid,ndim*ndim*ndim,'float32');
hr4=fread(fid, 1, 'int32');
fclose(fid);
但这给了我垃圾。也许在这里:
real*4, dimension(:), allocatable :: x0
real*8, dimension(256,256,256) :: dense
我是否需要更改:mesh_raw = fread(fid,ndim*ndim*ndim,'float32'); 确保它读取的是真实的* 8?那会是什么?当然只是逐字使用'real * 8'应该有效吗?我的意思是 x 矢量作品的“真实* 4”。我的意思是它读作“密集”,但最小值/最大值/平均值是错误的。