numpy 将matlab转换为python以阅读二进制文件

eufgjt7s  于 2023-05-17  发布在  Matlab
关注(0)|答案(1)|浏览(147)

我正在尝试将matlab脚本转换为python。该脚本读取一个二进制文件并将其重新整形为多个列。matlab脚本是:

fid=fopen(binary_file,'rb');
[inpar,ic]=fread(fid,4,'int');
if (ic<4) ; idata=[];return;end
nmagic=inpar(1);
nh=inpar(2);
nrpar=inpar(3);
nipar=inpar(4);

[rdata,ic]=fread(binary_file,[nh,nrpar],'float');
if (ic<nh*nrpar) ; return;end
[idata,ic]=fread(fid,[nh,nipar],'int');
if (ic<nh*nipar) ; return;end

我尝试的python代码是:

import numpy as np 

inpar = np.fromfile(fid, dtype=np.int32)
nmagic, nh, nrpar, nipar = inpar

rdata = np.fromfile(fid, dtype=np.float32, count=nh * nrpar).reshape(nh, nrpar)
idata = np.fromfile(fid, dtype=np.int32, count=nh * nipar).reshape(nh, nipar)

我不知道Matlab是如何重塑数据的。谁能帮我翻译代码,在Python中实现相同的结果。这里给出了一个样本数据

z6psavjg

z6psavjg1#

让我们尝试读取数据与openrb模,所以它将被读取在二进制模式。然后我们将使用np.fromfile从文件中读取。

import numpy as np

with open(binary_file, 'rb') as fid:
    inpar = np.fromfile(fid, dtype=np.int32, count=4)
    if inpar.size < 4:
        idata = []
    else:
        nmagic, nh, nrpar, nipar = inpar

        rdata = np.fromfile(fid, dtype=np.float32, count=nh * nrpar)
        if rdata.size < nh * nrpar:
            # handle error
            pass
        else:
            rdata = rdata.reshape(nh, nrpar)

        idata = np.fromfile(fid, dtype=np.int32, count=nh * nipar)
        if idata.size < nh * nipar:
            # handle error
            pass
        else:
            idata = idata.reshape(nh, nipar)

相关问题