从Python创建* .mat文件而不使用字典

时间:2017-06-14 11:10:43

标签: python matlab dictionary scipy mat-file

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

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

那么有没有办法在不使用mat file的情况下保存dictionaries?有关更多信息,请参阅图片*.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})

2 个答案:

答案 0 :(得分: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}添加额外级别。

答案 1 :(得分:1)

您可以直接使用“写入原语”

import scipy.io.matlab as ml

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