7

私はFortranで次のように行列を書きました。

real(kind=kind(0.0d0)), dimension(256,256,256) :: dense

[...CALCULATION...]

inquire(iolength=reclen)dense
open(unit=8,file=fname,&
form='unformatted',access='direct',recl=reclen)
write(unit=8,rec=1)dense(:,:,:) 
close(unit=8)

これをPythonに読み戻したいと思います。私が見たものはすべて、3Dアレイではなく2DNxNアレイ用です。Matlabでは、次のように読むことができます。

fid =    fopen(nfilename,'rb');
mesh_raw = fread(fid,ndim*ndim*ndim,'double');
fclose(fid);
mesh_reshape = reshape(mesh_raw,[ndim ndim ndim]);

Pythonで同等のものが必要です-おそらく、同様のロード/リシェイプツールが利用可能です。Pythonが理解できるようにそれを書き出すためのより親しみやすいコンパクトな方法があれば、私は提案を受け入れます。それはおそらくこれの何かに見えるでしょう:。私は自分の場合の同等の構文に慣れていません。良いリファレンスで十分です。ありがとう。

4

2 に答える 2

8

IRO-botのリンクを使用して、スクリプト用にこれを変更/作成しました(numpyの魔法だけです):

def readslice(inputfilename,ndim):
    shape = (ndim,ndim,ndim)
    fd = open(fname, 'rb')
    data = np.fromfile(file=fd, dtype=np.double).reshape(shape)
    fd.close()
    return data

立方体で平均、最大、最小、合計を実行しましたが、それは私のfortranコードと一致しています。ご協力いただきありがとうございます。

于 2012-12-11T20:51:54.250 に答える
0

ここでは直接読み取り以外は何も見えません。Python は、3 次元はおろか 2 次元配列もうまく扱えませんが、このコードはうまくいくはずです。

fin=open('filename.dat','rb')
output=[]
for x in range(0,ndim):
    xarr=[]
    for y in range(0,ndim):
        yarr=[]
        for z in range(0,ndim):
            yarr.append(struct.unpack('i', fin.read(4)))
        xarr.append(yarr)
   output.append(xarr)
于 2012-12-11T20:40:41.613 に答える