需求
将python程序中的数据保存为.mat格式数据,方便后续导入到matlab中进行处理分析。
实现
可调用已有接口:scipy.io.savemat(file_name, mdict)
- file_name为保存的文件名
- mdict为一个字典,其中包含了要保存的变量名和对应的值。
实例1
实例代码如下:分别保存int, string, list, dict, array类型数据到一个.mat文件。看一下效果如何。
from scipy.io import savemat
import numpy as np
a = 100
b = 'hello world'
c = [1, 2, 3]
d = {'name':'kai', 'state':'peace', 'age':22}
e = np.arange(4).reshape((2,2))
file_name = 'data.mat'
savemat(file_name, {'a':a,'b':b,'c':c,'d':d,'e':e})
将生成的data.mat
文件导入到matlab中看一下,结果如下。可见savemat()
可方便的保存上述数据类型为对应的matlab格式。比如会将字典转换成结构,将array转换成矩阵。
实例2
实例1适用于较简单的数据保存,这里展示如何将python的数据类型保存为matlab中的cell格式。
例1
需求:将python中的str list,保存为matlab的cell。
错误的实现方式:
a = ['aa', 'bb', 'cc']
file_name = 'data.mat'
savemat(file_name, {'a':a})
结果:这样会默认变成char类型。
正确的实现方式:即需要先将其转化为dtype=np.object的array,savemat后就能保存为cell
a = ['aa', 'bb', 'cc']
a = np.array(a, dtype=np.object)
file_name = 'data.mat'
savemat(file_name, {'a':a})
结果:成功转变成了cell
实例3
需求:将python中的一个嵌套list(其中元素的数据类型可以不一致),保存为matlab的cell
正确的实现方式:原理同上,python中的dtype=np.object的array将对应matlab中的cell。若有嵌套list,则将子list也转变为array。
a = [['aa', 'bb', 'cc'], 12, 'dd']
a_ = np.empty((len(a),), dtype=np.object)
a_[0] = np.array(a[0], dtype=np.object)
a_[1] = a[1]
a_[2] = a[2]
file_name = 'data.mat'
savemat(file_name, {'a':a_})
结果: