我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python如何处理matlab的mat数据

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python如何处理matlab的mat数据

处理matlab的mat数据

python 和matlab是2个常用的实验室平台工具,在一些应用下,这2个不同平台下的数据会打交道,因此如何读取和保存显得尤为重要,这里需要用到python的第三方平台下的scipy模块。

先用下面这个命令检查是否下载好scipy

import scipy

如果报错,用python install scipy 或者 conda install scipy 下载安装

需要用到scipy中的输入输出类中的loadmat 和savemat方法: 

import scipy.io as sio
 
sio.loadmat(file_name, mdict=None, appendmat=True, **kwargs)
sio.savemat(file_name, mdict, appendmat=True, format='5', long_field_names=False, do_compression=False, oned_as='row'

下面介绍一个简单的错误例子:(需要传字典格式的参数)

import scipy.io as sio
import numpy as np
 
x = np.ones((3,3))
 
x
Out[86]: 
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
 
sio.savemat('f.mat',x)
Traceback (most recent call last):
 
  File "<ipython-input-87-d739bc03c885>", line 1, in <module>
    sio.savemat('f.mat',x)

下面介绍一个简单的保存 导入例子:

import scipy.io as sio
import numpy as np
 
x = np.ones((3,3))
 
x
Out[86]: 
array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])
 
sio.savemat('f.mat',{"x":x})
 
 
 
myMat =sio.loadmat('f.mat')
 
print(myMat) #输出为字典
{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Fri Aug 21 16:29:37 2020', '__version__': '1.0', '__globals__': [], 'x': array([[1., 1., 1.],
       [1., 1., 1.],
       [1., 1., 1.]])}
 
#以保存名为key,输出list value
print(myMat['x'])
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]

如果想把python数据保存为mat数据,则需要cell格式数据,而python没有实现cell,因此需要用到numpy模块,可以看这篇博客。

处理matlab的*.mat格式数据及常见错误汇总

由于matlab和python两种语言的编程方式不同,有时候在进行程序混编时,需要利用python调用matlab下的格式数据,下面介绍如何调用mat格式数据及常见错误解决方法,仅供参考!

一、数据读取错误

# 最初用loadmat读取数据
import numpy as np
from scipy.io mport loadmat
img = loadmat('im.mat')['im']   #im.mat为mat数据的名称,['im'] 中的im表示该文件下im的数据

使用如上代码读取数据时,会出现如下错误:

在这里插入图片描述

如果出现以上错误,改用下面方式读取,

import h5py
img = h5py.File('im.mat')['im']
img = h5py.File('im.mat','r')['im']    # 无警告

二、数据类型错误

(用Python处理图像时,若涉及加减运算,溢出差值被重新赋值255-0)

# python代码
import h5py
import numpy as np
img = h5py.File('im.mat')['im']
# python中的M,N刚刚好与matlab中的M,N取值相反,此处进行转置与matlab相同矩阵格式进行处理
x = np.array(img).T  
[M, N] = x.shape
if M < 16 and N < 16:
    score = -2
# Feature Extraction:
# 1. horizontal features
d_h = x[:, 1:N] - x[:, 0:N - 1]   # 该步操作图像产生满溢,溢出后差值可能都被赋为255,依次递减

此种情况下,d_h数据会出现满溢情况,下面就是相同数据在python和matlab下面进行运算的差异性。

在这里插入图片描述

% Matlab 代码
img = laod('im.mat')
[M, N] = size(x)
if M < 16 | N < 16
    score = -2;
end   
x = double(img);  % 将无符号类型uint8数据类型转换为double类型
% Feature Extraction:
% 1. horizontal features
d_h = x(:, 2:N) - x(:, 1:(N-1));

在这里插入图片描述

原因: 导入数据类型为 uint8 数据格式,该种格式下是没有负数的,在matlab中进行运算时,先将uint8数据类型转化为了double类型,然后进行了减法运算,所以会出现如上结果,但是在python中,由于没有double类型,所以需要自己手动设置数据格式类型,只需要改成不是uint8格式即可(具体格式需要根据需求,此处改成了int8格式类型)。解决方法非常简单,只需在上面的一行代码中加入数据类型即可:

x = np.array(img,dtype = 'int8').T   # 对读取的uint8格式数据进行重新定义一下格式即可
x = np.array(img,dtype = 'float').T   # 下面这种格式虽然是浮点型,但是计算过程不容易出错,如果是上面的int8会出现部分错误,需要注意

现在看一下结果,就跟matlab处理结果一样了。

在这里插入图片描述

虽然下面是浮点型,但是能够保证数据转化的精度和准确性,img的影像数据转化成数值时不出错误,非必要情况下,不要使用int8数据格式,因为使用int8格式数据类型,会在某些部分出错,这一定要注意。(改组数据中(0,80)数值在int8格式转化时出错,原始数值为129,转化之后变成127,而使用float格式则不会出现错误)

在这里插入图片描述

原始数据unit8数据格式类型的数值为129,在python中不同格式类型的值就不一样。

在这里插入图片描述

所以uint8格式,在python运算中还是转换成float格式靠谱,转换成int8真的不行呀!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python如何处理matlab的mat数据

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么在python中读取matlab处理后的数据.mat文件

这篇文章主要介绍“怎么在python中读取matlab处理后的数据.mat文件”,在日常操作中,相信很多人在怎么在python中读取matlab处理后的数据.mat文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家
2023-06-22

Python 读写 Matlab Mat 格式数据的操作

1. 非 matlab v7.3 files 读写import scipy.io as sio import numpy # matFile 读取 matFile = 'matlabdata.mat' datas = sio.loadmat
2022-06-02

matlab如何对数据滤波处理

在MATLAB中,可以使用不同的函数对数据进行滤波处理,下面介绍几种常用的滤波方法。1. 移动平均滤波(Moving Average Filter):可以使用函数`smoothdata`对数据进行移动平均滤波处理。例如,对数据向量`data
2023-10-08

Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决

这篇文章主要介绍了Matlab中的mat数据转成python中使用的npy数据遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-15

怎么在python中使用scipy.io模块处理mat数据

今天就跟大家聊聊有关怎么在python中使用scipy.io模块处理mat数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python有哪些常用库python常用的库:1.requ
2023-06-14

python如何处理SQLite数据库

本篇内容主要讲解“python如何处理SQLite数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python如何处理SQLite数据库”吧!一、安装pip3 install pysqlit
2023-06-29

Python如何数据处理csv的应用

今天小编给大家分享一下Python如何数据处理csv的应用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。题目文件scores
2023-06-26

matlab怎么对导入的数据进行处理

在MATLAB中,可以使用各种函数和工具箱来处理导入的数据。以下是一些常用的数据处理方法:1. 数据清洗:使用函数如`isnan`、`isinf`、`ismissing`等来检查和处理缺失值、无效值和异常值。可以使用函数如`fillmiss
2023-08-31

matlab处理大量数据的方法是什么

在处理大量数据时,MATLAB提供了许多方法和工具,包括以下几种:1. 预分配内存:在处理大量数据时,预分配内存是一种有效的方法,可以避免在循环中频繁申请和释放内存空间。可以使用函数如zeros、ones或empty创建一个大小已知的数组,
2023-09-15

matlab数据平滑处理的方法有哪些

在Matlab中,可以使用以下方法对数据进行平滑处理:1. 移动平均滤波(Moving Average Filtering):计算一段时间内数据的平均值,并将该平均值作为平滑后的数据点。2. 中值滤波(Median Filtering):计
2023-10-08

matlab如何改变数据的精度

在MATLAB中,可以使用`format`命令来改变数据的显示精度。具体步骤如下:1. 打开MATLAB命令窗口。2. 输入`format`命令,后面跟上要设置的精度选项。- `format short`:显示小数点后4位数字。- `for
2023-09-15

如何利用Python多处理库处理3D数据

如何利用Python多处理库处理3D数据,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。今天我们将介绍处理大量数据时非常方便的工具。我不会只告诉您可能在手册中找到
2023-06-22

如何将matlab数据导入到Python中使用

这篇文章主要介绍了如何将matlab数据导入到Python中使用,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
2022-12-15

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录