在 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
后它将被删除。
我有一大组 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
后它将被删除。