我有大量 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/