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

标签 python matlab scipy hdf5 mat-file

我有大量 matlab 文件数据文件,需要在 Python 中访问。 文件是使用带有 -v6-v7 选项的 save 保存的,但不是使用 -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']

更新:如果您只需要数组/矩阵的第一个元素,您可以这样做:

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

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

关于python - python 中 matlab (.mat) 文件 -v7 的部分加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47535988/

相关文章:

python - 调用 scipy.linalg.cython_blas.daxpy 的正确方法是什么?

python - 如何使用 setuptools 指定 python 版本?

matlab - 用于连续数字范围的 switch 语句

python - 构造相似度矩阵的最有效方法

python - 用于存储车牌和搜索是否存在给定车牌的最佳数据结构

python - 如何启动应用程序而不导航到其目录

arrays - 返回可能重复的数组元素的所有唯一排列

matlab - 制作以 x 轴为基线的 3D 茎图?

python 稀疏 csr 矩阵 : how to serialize it

python - 在 sklearn 中,有没有一种方法可以测试对我的 DecisionTreeClassifier 模型做出的预测的置信度?