python - Matlab -> Python。从磁盘读取异构一维二进制数组

标签 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 会将文件中的读取指针向前移动吗?

最佳答案

尝试使用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 行组合起来,请通过 google 获取更多示例。

关于python - Matlab -> Python。从磁盘读取异构一维二进制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16269377/

相关文章:

python - 如何在python中添加未知值

使用 selenium 在 Sauce Lab 上进行 Android 测试

python - 捕获和处理网络摄像头提要并将其作为 "virtual webcam"公开-在Python中,在Windows上

c - 如何将c代码转换为matlab

c - 复制到二进制文件时出现段错误

c - 从 C 静态库中删除内部符号

python - 如何检测无响应/卡住的进程?

c++ - 将 C++ 特征矩阵传递给 Matlab mex 输出

matlab - 在 Matlab 中检查像素

php - 使用哪个 PHP 函数将二进制文件读入字符串?