如何将输出的fortran二进制NxNxN矩阵读入Python

时间:2012-12-11 19:46:30

标签: python numpy matrix binary fortran

我在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。我见过的所有东西都是2D NxN阵列而不是3D阵列。在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理解,我愿意接受建议。它可能看起来像this :.我只是不熟悉我的情况的等效语法。一个很好的参考就足够了。感谢。

2 个答案:

答案 0 :(得分: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代码。谢谢你的帮助。

答案 1 :(得分:0)

我看不到任何东西,只能在这里直接阅读。 Python并不能很好地处理2-D数组,更不用说3-d了,但这段代码应该可以工作。

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)