我剛纔寫了一個文件:在matlab中讀取未格式化的Fortran文件 - 哪個精度?
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和max是一個大實正數* 8)。
min =
3.3622e+38
max =
-3.3661e+38
我需要在Matlab中設置什麼精度才能使其在未格式化的Fortran文件中讀取?
一個有點相關的問題:我使用的這個Matlab代碼讀取二進制文件,但沒有格式化文件。儘管我使用gfortran在我的Mac OSX上生成了這些新數據。它不識別form =「binary」,所以我不能這樣做。我需要添加一些庫還是這個endian問題?
=====進展=====
好的進展。相反,我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?那會是什麼?當然只是使用'真實* 8'的逐字記錄應該工作?我的意思是'真正* 4'的X矢量作品。我的意思是它讀取「密集」,但最小/最大/平均值是錯誤的。
「UINT32」可能是解決辦法... – Griff