如何使用 scipy.io.savemat 附加到 .mat 文件?

ent*_*ney 9 python numpy scipy

所以当我使用 savemat 命令时,它往往会覆盖文件。有没有可能的方法来追加而不是覆盖?我知道一种解决方法是将所有内容都放入一个列表中,然后将其转换为字典。这对我不起作用,因为我试图提高 RAM 效率。进行在线搜索时,我发现使用 scipy.io.savemat() 时如何不覆盖 .mat 文件?

这也行不通,因为它涉及在您的 ram 内存中提取一个数据文件以在每个循环中附加它,从速度的角度来看这似乎很愚蠢。

我想过附加到一个 numpy 二进制文件,然后将其拉入并将其保存到 .mat 文件中?我不确定这是否会比第一个选项更高效。

谢谢!

hpa*_*ulj 4

根据savemat文档:

file_name : str 或类似文件的对象

所以你可以以追加模式打开文件,然后写入,例如

io.savemat('temp.mat',{'data':np.ones(10)})  # write
with open('temp.mat','ab') as f:
    io.savemat(f, {'newdata':np.arange(5)})   # append
print io.loadmat('temp.mat').keys()           # read
# dict_keys(['data', '__globals__', 'newdata', '__header__', '__version__'])
Run Code Online (Sandbox Code Playgroud)

或者完整的描述:

{'data': array([[ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.]]),
 '__globals__': [],
 'newdata': array([[0, 1, 2, 3, 4]]),
 '__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Fri Mar 13 14:14:33 2015',
 '__version__': '1.0'}
Run Code Online (Sandbox Code Playgroud)

https://github.com/scipy/scipy/blob/master/scipy/io/matlab/mio5.py#L34中的注释表明,当数据文件中有函数时,附加存在问题,但这表明如果我们只是保存数组,那么附加不是问题。scipy但也许需要进一步研究这些问题。

  • 它创建了文件,但由于某种原因我无法加载它。我收到 TypeError: Expecting miINT32 as data type。您可以将数据附加到同一个字典键。但是你不能用新数据附加新的字典键,这就是我想要做的。我会将其标记为答案,因为它回答了我的问题,但没有解决我的问题 (2认同)