2017-06-14 26 views
1

我有几个列表,我想将它保存到*.mat file。但根据scipy.io.savemat命令文档,我需要创建一个带有列表的字典,然后使用该命令将其保存到*.mat file从Python创建* .mat文件而不使用字典

如果我按照文档中提到的方式保存它,mat文件将具有结构变量作为我在字典中使用的数组。现在我在这里有一个问题,我有另一个程序(这是不可编辑的)将使用垫文件并加载它们来绘制数据中的一些图。程序无法处理结构,因为它是以加载mat文件的方式编写的,然后直接处理其中的数组。

那么有没有办法在不使用dictionaries的情况下保存mat file?请参阅图片了解更多了解*.mat file with struct

*.mat file without struct

感谢

这是样品的算法我曾经救我*.mat file

import os 
os.getcwd() 
os.chdir(os.getcwd()) 
import scipy.io as sio 

x=[1,2,3,4,5] 
y=[234,5445,778] #can be 1000 lists 

data={} 

data['x']=x 
data['y']=y 
sio.savemat('test.mat',{'interpolated_data':data}) 
+0

难道你只需要其中的密钥(这将在名称MATLAB加载后)预计在此不可编辑的程序名称相对应的字典吗? –

+0

@ŁukaszRogalski我完全不明白你的意思。你能再解释一下吗 – ayaan

+0

你可以添加一个调用'scipy.io.savemat'的代码的例子吗?好像你是滥用这个功能... – Shai

回答

2

如何

scipy.io.savemat('interpolated_data_max_compare.mat', 
       {'NA1_X_order10_ACCE_ms2': np.zeros((3000,1)), 
        'NA1_X_order10_DISP_mm': np.ones((3000,1))}) 

应该工作è...

根据你在你的问题中添加的代码,而不是sio.savemat('...', {'interpolated_data':data}),只保存

sio.savemat('...', data) 

,你应该罚款:data已经是一本字典,你不需要添加保存时需要{'interpolated_data': data}

+0

如果我有很多列表,你会如何建议我编写命令? – ayaan

+0

@ayaan看到我的编辑。 – Shai

+0

我会在几分钟内更新我的结果 – ayaan

1

您可以使用写作元直接

import scipy.io.matlab as ml 

f=open("something.mat","wb") 
mw=ml.mio5.MatFile5Writer(f) 
mw.put_variables({"testVar":22}) 
+0

不应该打开写入(和二进制?)。什么是's'?它应该是'f'吗? – Shai

+0

你可以添加一个链接做一个'ml.mio5'的文档吗?有可能它只是'scipy.io.savemat'的后端? – Shai

+0

是的,是的,它是后端,'savemat'帮助末尾引用的'scipy.io.matlab.mio5'。 – xvan