Python读写mat文件操作指南(使用scipy.io)

 更新时间:2023年06月25日 16:20:55   作者:天河逐月  
Matlab是一个非常好用的矩阵计算分析软件,然而随着深度学习的发展,Python语言也逐渐成为人们的常用编程语言,这篇文章主要给大家介绍了关于Python使用scipy.io读写mat文件的相关资料,需要的朋友可以参考下

在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 loadmat
 
path = 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 loadmat
 
path = 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中创建的内容一致,读取成功。

总结 

到此这篇关于Python读写mat文件操作的文章就介绍到这了,更多相关Python读写mat文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python数据分析Numpy库的常用操作

    python数据分析Numpy库的常用操作

    numpy 是 Python 的一个科学计算的库,提供了矩阵运算的功能,其一般与 Scipy、matplotlib 一起使用,这篇文章总结下python数据分析Numpy库的常用操作,感兴趣的朋友一起看看吧
    2022-01-01
  • Python存储json数据发生乱码的解决方法

    Python存储json数据发生乱码的解决方法

    当使用json.dump()把python对象转换为json后存储到文件中时,文件可能会出现乱码的问题,本篇文章可以帮助您解决乱码问题,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Python 工具类实现大文件断点续传功能详解

    Python 工具类实现大文件断点续传功能详解

    用python进行大文件下载的时候,一旦出现网络波动问题,导致文件下载到一半。如果将下载不完全的文件删掉,那么又需要从头开始,如果连续网络波动,是不是要头秃了。本文提供断点续传下载工具方法,希望可以帮助到你
    2021-10-10
  • Python操作列表之List.insert()方法的使用

    Python操作列表之List.insert()方法的使用

    这篇文章主要介绍了Python操作列表之List.insert()方法的使用,是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • scrapy框架中的items文件夹的用法详解

    scrapy框架中的items文件夹的用法详解

    这篇文章主要介绍了scrapy框架中的items文件夹的用法详解,在Scrapy框架中,items文件夹是用来存放定义数据模型的Item类的地方,Item类描述了要从网页中提取的数据的结构和字段,通过使用Item类,我们可以更方便地组织和处理爬取到的数据,需要的朋友可以参考下
    2023-10-10
  • python同时遍历两个list用法说明

    python同时遍历两个list用法说明

    这篇文章主要介绍了python同时遍历两个list用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 在PyCharm中实现添加快捷模块

    在PyCharm中实现添加快捷模块

    今天小编就为大家分享一篇在PyCharm中实现添加快捷模块,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python实现排序方法常见的四种

    Python实现排序方法常见的四种

    本文给大家分享python四种常见排序方法,每种方法通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-07-07
  • 套娃式文件夹如何通过Python批量处理

    套娃式文件夹如何通过Python批量处理

    这篇文章主要介绍了套娃式文件夹如何通过Python批量处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python3中bytes类型转换为str类型

    Python3中bytes类型转换为str类型

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。这篇文章主要介绍了Python3中bytes类型转换为str类型的相关知识,需要的朋友可以参考下
    2018-09-09

最新评论