需求

将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_})

结果:
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐