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

2024-09-30 00:23:12 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,当我使用savemat命令时,它往往会覆盖文件。有没有可能的方法来追加而不是覆盖?我知道一个可行的办法是把所有的东西都写进一个列表,然后把它转换成一本字典。这对我不起作用,因为我在努力提高内存效率。我在网上搜索时发现了这个How NOT to overwrite the .mat file when using scipy.io.savemat()?

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

我想附加到一个numpy二进制文件,然后把它拉进来并保存到一个.mat文件?但我不确定这是否比第一个选项更有效。

谢谢!


Tags: 文件to方法内存命令列表字典not
1条回答
网友
1楼 · 发布于 2024-09-30 00:23:12

根据savemat文档:

file_name : str or file-like object

所以你可以在append模式下打开文件,然后写,例如

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__'])

或完整描述:

{'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'}

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

相关问题 更多 >

    热门问题