Matlab - >蟒蛇。从磁盘读取异构1D二进制数组

时间:2013-04-28 23:59:56

标签: python matlab binaryfiles fread

假设我们有一个简单的小文件,其中一维数组包含不同的值类型,具有特定的结构(第一项是MATLAB uint,第二项是MATLAB uint,其余值是float

如何从Python中的文件中读取这样的异构类型数组?

MATLAB中的等效代码如下。

function M = load_float_matrix(fileName)

fid = fopen(fileName);
if fid < 0
    error(['Error during opening the file ' fileName]);
end

rows = fread(fid, 1, 'uint');
cols = fread(fid, 1, 'uint');
data = fread(fid, inf, 'float');

M = reshape(data, [cols rows])';

fclose(fid);

end

注意:this thread描述了以下方法来读取三个连续的uint32值:

f = open(...)
import array
a = array.array("L")  # L is the typecode for uint32
a.fromfile(f, 3)

但是,我怎么知道L是uint32的类型代码?其他类型呢? (例如float)。

另外,如何从f读取连续值? a.fromfile会将文件中的读指针向前移动吗?

1 个答案:

答案 0 :(得分:2)

尝试numpy。

以下是一种方法。

import numpy as np
f = open(filename,"r")
N = np.fromfile(fp,dtype=np.int32,count=2)
a = np.fromfile(fp,dtype=np.float64)
a = np.resize(a,N)

使用此功能,您还可以读取混合格式/类型(文本+二进制)文件。通过正确格式化dtype选项,可以将第3行和第4行组合在一起,谷歌可以提供更多示例。