1

サイズが256 ^ 3の配列を作成しました。

real*8, dimension(256,256,256) :: dense

open(unit=8,file=fname,form="unformatted")
write(8)dense(:,:,:)
close(8)

Matlabが読めるようにこれを書き出す最良の方法は何でしょうか? 使用したい後処理があります。

gfortran を使用しているため、バイナリ形式を使用できません:{ これは本当ですか? フォームを「バイナリ」に設定しましたが、認識されません。ifortもインストールしていません。

4

2 に答える 2

3

フォーマットされていないストリームアクセスを使用して配列を書き出します。ストリームアクセスは、バイナリと同等の標準です。IROボットの答えから盗む:

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など)。

于 2012-12-07T04:49:45.720 に答える
0

streamはい、 IanH によって提案されているように、アクセスまたは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属性を指定しないと、ファイルはモードで開かれます。これは、レコード長に関する情報を含む各レコードにパディングが追加されるため、読み取りに不便な場合があります。accessを使用すると、レコード長を明示的に指定できます。この場合、書き込まれるファイルのサイズは正確に になります。したがって、配列の順序とエンディアンを知っていると仮定すると、MATLAB スクリプトから読み取ることができます。opensequentialdirect8*256^3

于 2012-12-07T06:17:09.113 に答える