私はちょうどファイルを書き出しました:
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
フォーマットされていない Fortran ファイルで読み取るには、Matlab でどの精度を設定する必要がありますか?
やや関連する質問:私が使用しているこの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 ベクトルが機能するための「real*4」を意味します。「密」と表示されていますが、最小値/最大値/平均値が間違っています。