在 python 中部分加载 matlab (.mat) 文件 -v7

partial load of matlab (.mat) files -v7 in python

我有一大组 matlab 文件数据文件,我需要在 Python 中访问这些文件。 文件是使用 save-v6-v7 选项保存的,而不是 -v7.3.

我只需要从每个文件中读取一个数值,文件很多(100k+)而且比较大(1MB+)。 因此,我 99% 的时间都花在了无用的 I/O 操作上。

我正在寻找类似部分加载的东西,这对于使用 HDF5 库的 -v7.3 文件是可行的。

到目前为止,我一直在使用 scipy.io.loadmat API。

文档说:

v4 (Level 1.0), v6 and v7 to 7.2 matfiles are supported.
You will need an HDF5 python library to read matlab 7.3 format mat files. 
Because scipy does not supply one, we do not implement the HDF5 / 7.3 interface here.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html

不过貌似不允许偏载。

有没有人有实现这种功能的经验,或者有没有人知道如何在较低级别解析这些 .mat 文件?

我想当结构已知时,类似 fseek 的方法是可行的

如果要读取单个变量,请使用variable_names参数:

d = loadmat(filename, variable_names=['variable_name'])

然后按如下方式访问:

d['variable_name']

更新: 如果您只需要 array/matrix 的第一个元素,您可以这样做:

val = loadmat(filename, variable_names=['var_name']).get('var_name')[0, 0]

注意:它仍然会将整个变量读入内存,但在第一个元素分配给 val 后它将被删除。