Python读写mat文件(使用scipy.io)

news/2024/11/8 3:37:11/

在matlab中,数据可保存为mat文件,使用save和load命令可进行读写操作。而在Python中,也可以对mat文件进行读写。

一、由matlab向Python传数据(Python读取mat文件)

第一步:使用matlab创建变量并保存至mat文件

使用matlab分别创建数、数组、元胞数组等类型的变量,然后保存到mat文件中。

clear
path = 'D:\temp\mydata.mat';  % 用于存放mat文件的路径
n = 12;  % 数
s = 'Hello';  % 字符串
A = [1,2,3,4,5; 6,7,8,9,0];  % 数组
C = {'str1','str2','str3'; 'str4','str5','str6'};  % 元胞数组
save(path, 'n', 's', 'A', 'C');  % 保存上述变量

注意存放mat文件的文件夹必须存在,即要事先创建好,否则会报错。

保存后,来读取一下其中的数据:

 可以确定上述变量已保存至mat文件。

第二部,使用Python读取上述mat文件

使用scipy.io中的loadmat方法对mat文件进行读取。编辑代码如下:

from scipy.io import loadmatpath = r"D:\temp\mydata.mat"  # mat文件路径
data = loadmat(path)  # 读取mat文件
print(data.keys())  # 查看mat文件中包含的变量Out:
dict_keys(['__header__', '__version__', '__globals__', 'A', 'C', 'n', 's'])

可见读取到的mat文件中包含变量n、s、A、C,与matlab保存的变量一致。

分别读取这些变量:

from scipy.io import loadmatpath = r"D:\temp\mydata.mat"  # mat文件路径
data = loadmat(path)
n = data['n']  # 数
s = data['s']  # 字符串
A = data['A']  # 数组
C = data['C']  # 元胞数组print(n)
print(s)
print(A)
print(C)

运行后显示结果如下:

[[12]]
['Hello']
[[1 2 3 4 5][6 7 8 9 0]]
[[array(['str1'], dtype='<U4') array(['str2'], dtype='<U4')array(['str3'], dtype='<U4')][array(['str4'], dtype='<U4') array(['str5'], dtype='<U4')array(['str6'], dtype='<U4')]]

与matlab创建的内容一致,可见mat文件已被成功读取。

但注意观察读取出来的各个变量的数据类型,发现均为“numpy.ndarray”类型。所以要想使用读取出来的数据,需要再次从ndarray中进行读取。

In:
n0 = n[0][0]  # 读取单个数
s0 = s[0]  #读取字符串
A0 = A[0][2]  # 读取数组中第1行第3个元素
C0 = C[0][1][0]  # 读取元胞数组中第1行第2个元素
print(n0)
print(s0)
print(A0)
print(C0)Out:
12
Hello
3
str2

这样就读取出了指定的数据。

二、由Python向matlab传数据(Python写入mat文件)

第一步:使用Python创建变量并保存至mat文件

使用Python创建数、字符串、数组等类型的变量,然后使用scipy.io中的savemat方法在指定的路径保存mat文件。

from numpy import array
from scipy.io import savemat# 创建变量
path = r"D:\temp\mydata02.mat"  # 路径
num = 12  #  数
str = 'abcde'  # 字符串
list = array([1,2,3,4,5])  # 数组# 构造字典,用于保存变量
data = {}
data.update({'num':num})
data.update({'str':str})
data.update({'list':list})# 保存变量到mat文件
savemat(path, data)

注意,Python中的字典(Dictionary)和集合(Set)不能保存。

第二步:使用matlab读取上述mat文件

打开matlab并读取该mat文件,如下图所示:

与Python中创建的内容一致,读取成功。 


http://www.ppmy.cn/news/110051.html

相关文章

网络无法分配 IP 地址有什么原因?

IP地址是计算机网络中用于唯一标识一台设备的地址&#xff0c;由四部分组成&#xff1a; 网络地址&#xff1a;表示设备所连接的网络的地址&#xff0c;多数情况下是点分十进制表示的。 主机地址&#xff1a;表示设备在网络中的具体物理地址&#xff0c;也是点分十进制表示的。…

黑马Redis视频教程实战篇(一)

目录 一、短信登录 1.1、导入黑马点评项目 &#xff08;1&#xff09;导入黑马点评sql脚本 &#xff08;2&#xff09;导入后端项目 &#xff08;3&#xff09;导入前端项目 1.2、基于Session实现登录流程 1.3 、实现发送短信验证码功能 1.4 、实现登录拦截功能 1.5 、隐…

Linux系统下imx6ull QT编程—— Ubuntu 下编写程序(一)

Linux QT编程 文章目录 Linux QT编程前言一、C简介二、C环境设置1.安装编译 C 语言和 C的环境。2.创建文件编写代码3.编译运行代码 总结 前言 绍在 Ubuntu 在终端窗口下使用 vi/vim 编辑一个 C源文件。通过编写最简单的示例“Hello,World QCX”。 一、C简介 C &#xff08;c…

使用Intel ARC 750 GPU或Intel CPU硬件在GIMP上运行stable diffussion插件进行AI绘图

安装步骤&#xff1a; 1. clone代码&#xff1a; git clone https://gitee.com/cslola/openvino-ai-plugins-gimp.git 或者直接到github上下载最新 git clone https://github.com/intel/openvino-ai-plugins-gimp.git2. 安装python以来库文件 :: run install script open…

OpenWRT 实现Exsi8单个公网ip管理与访问

一台Dell R720机器 内存256G(64G*4)硬盘SSD 8T(1T*8)搭建了一个裸金属k8s集群(对比阿里云单台4核8G的费用不相上下) 机房上架提供了一个公网ip 需要一个公网ip能实现exsi虚拟机管理 又可以让虚拟机实现web访问 是终通过OpenWRT实现 OpenWRT实现步骤 1、官网访问并下载img镜…

新手快速学会使用DDL对数据库和表的操作

前言 SQL是一种操作关系型数据库的结构化查询语言。今天这篇文章将详细讲述数据定义语言DDL对数据库和表的相关操作。 文章目录 前言1. DDL-操作数据库1.1 查询1.2 创建数据库1.3 删除数据库1.4 使用数据库2.1 数据类型2.2 查询表2.3 创建表2.4 删除表2.5 修改表 3. 实战案例详…

Navicat 15获取用户的密码

我使用Navicat连接好了mysql但是密码忘记了&#xff1b;可以通过如下操作找回密码 我使用的Navicat版本是 15.0.27 1、选择文件 --> 导出连接 2、选择你要知道密码的连接  勾选导出密码&#xff08;默认位置是桌面&#xff09; 3、 在Password 这栏找到加密后的密码 …

Spring AOP简介及相关案例

目录 一、Spring AOP简介 二、AOP相关术语 三、AOP入门案例 1. 引入依赖 2. 编写连接点 3. 编写通知类 4. 配置切面 5. 测试 四、通知类型 1. 编写通知方法 2. 配置切面 3. 测试 五、切点表达式 六、多切面配置 1. 编写发送邮件的通知 2. 配置切面 3. 测试 …