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

时间:2017-11-28 16:07:23

标签: python matlab scipy hdf5 mat-file

我有一大堆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的方法

1 个答案:

答案 0 :(得分:3)

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

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

然后按如下方式访问它:

d['variable_name']

UPDATE:如果您只需要数组/矩阵的第一个元素,则可以执行此操作:

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

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