python的数据与matlab互通问题:SciPy
作者:后厂村路蔡徐坤 发布时间:2022-05-16 04:53:48
python数据与matlab互通SciPy
有时候需要利用python进行科学计算,但需要Matlab进行交互式画图,因此需要掌握python与matlab数据互通的技巧:SciPy
SciPy 提供了与 Matlab 的交互的方法。
SciPy 的 scipy.io 模块提供了很多函数来处理 Matlab 的数组。
python利用scipy.io.savemat()存储日志
参考:https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.savemat.html
(一)语法
scipy.io.savemat(file_name, mdict, appendmat = True, format = '5', long_field_names = False, do_compression = False, oned_as = 'row')
参数
file_name:str
.mat 文件的名称(如果没有扩展名,需要设置appendmat == True)
mdict:dict
从中保存 matfile 变量的字典。
appendmat:布尔值,可选
True(默认值)将 .mat 扩展名附加到给定文件名的末尾(如果尚不存在)。
fomat:{'5', '4'},字符串,可选
'5'(默认值)用于 MATLAB 5 及更高版本(至 7.2),'4' 用于 MATLAB 4 .mat 文件。
long_field_names:布尔型,可选
False(默认值)- 结构中的最大字段名称长度为 31 个字符,这是记录的最大长度。True - 结构中的最大字段名称长度为 63 个字符,适用于 MATLAB 7.6+。
do_compression:布尔值,可选
是否在写入时压缩矩阵。默认为假。
oned_as :{'row', 'column'},可选
如果是 'column',则将一维 NumPy 数组写为列向量。如果为“行”,则将一维 NumPy 数组写为行向量。
(二)例子
from scipy import io
import numpy as np
arr = np.arange(10)
io.savemat('arr.mat', {"vec": arr})
#如果存入多组数据
io.savemat('saveddata.mat', {'xi': xi,'yi': yi,'ui': ui,'vi': vi})
利用matlab读取mat日志的方法
(一)载入日志文件
mat_struct=load('C:\Users\XXX\Desktop\task3-2022y01m23d-17h52m.mat');
(二)取出元素
mat_struct=load('C:\Users\XXX\Desktop\task3-2022y01m23d-17h52m.mat');
ans=mat_struct.ans;
select_info=mat_struct.select_info;
select_info_p=mat_struct.select_info_p;
clear mat_struct;
Python数据分析scipy
SciPy是一组专门解决科学计算中各种标准问题域的包的集合,主要包括下面这些包:
scipy.integrate
:数值积分例程和微分方程求解器scipy.linalg
:扩展了由numpy.linalg提供的线性代数例程和矩阵分解功能scipy.optimize
:函数优化器(最小化器)以及跟查找算法scipy.signal
:信号处理工具scipy.sparse
:稀疏矩阵和系数线性系统求解器scipy.special
:SPECFUN(这是一个实现了许多常用数学函数(如伽马函数)的Fortran库)的包装器scipy.stats
:标准连续和离散概率分布(如密度函数、采样器、连续分布函数等)、各种统计检验方法,以及更好的描述统计法scipy.weave
:利用内联C++代码加速数组计算的工具
定积分scipy.integrate
导入积分模块:
import numpy as np #导入numpy库
from scipy import integrate #导入定积分模块
scipy.integrate.quad(func,a,b):计算单重积分,参数分别为被积函数(f(x))、积分下限、积分上限
res, err = integrate.quad(np.sin, 0, np.pi/2) # 对sin函数在[0,$\pi/2$]区间上积分,quad函数返回两个值,第一个为积分结果,第二个为误差值
print(integrate.quad(lambda x:x**2,0,1)) # 计算x**2的定积分,积分区间为0到1,并输出结果
scipy.integrate.dblquad(func,a,b,gfun,hfun):计算双重积分,参数分别为被积函数(f(y,x))、x的积分下限、x的积分上限、y的积分下限、y的积分上限
print(integrate.dblquad(lambda x,y:x**2+y,0,2,lambda x:0,lambda x:1)) #对x**2+y求定积分,x积分区间[0,1],y积分区间[0,2],并输出结果
scipy.integrate.nquad(func,ranges):计算多重积分,参数分别为被积函数(f(x0,x1,…,xn))、积分区间(格式为[[a,b],[c,d],[e,f]],依次为x0、x1、x2、的积分区间)
def f(x,y):
return x**2+y
def bound_x():
return [0,1]
def bound_y():
return [0,2]
print(integrate.nquad(f,[bound_x,bound_y]))
优化器scipy.optimize
导入模块
import numpy as np #导入numpy库
from scipy import optimize #导入优化模块
scipy.optimize.minimize(func,x0,args=(),method=None,jac=None):计算标量函数的最小值,参数分别为标量函数、初值、、寻优方法
寻优方法有:
插值scipy.interpolate
导入模块
import numpy as np #导入numpy库
from scipy import interpolate #导入interpolate模块
import matplotlib.pyplot as plt #导入绘图模块
x = np.linspace(0, 1, 10) #创建数组,相当于x
y = np.sin(2 * np.pi * x) #相当于y
scipy.interpolate.interp1d():1维插值函数
linear_f = interpolate.interp1d(x, y) #线性插值函数
x_new = np.linspace(0, 1, 50) #插值后的x
y_new = linear_f(x_new) #线性插值后的y
cubic_f = interpolate.interp1d(x, y, kind='cubic') #应用插值函数
cubic_y = cubic_f(x_new) #插值后的y值
展示效果
plt.figure()
plt.plot(x, y, 'o', ms=6, label='x')
plt.plot(x_new, y_new, label='linear interp')
plt.plot(x_new, cubic_y, label='cubic interp')
plt.legend()
plt.show()
线性计算与矩阵分解scipy.linalg
导入模块
import numpy as np #导入numpy库
from scipy import linalg as lg #导入scipy库的linalg模块
arr=np.array([[1,2],[3,4]]) #创建方阵arr
b=np.array([6,14]) #创建矩阵b
scipy.linalg.det():计算方阵的行列式
print('Det:',lg.det(arr)) #求矩阵arr的行列式
scipy.linalg.inv():计算方阵的逆矩阵
print('Inv:',lg.inv(arr)) #求矩阵arr的逆矩阵
scipy.linalg.eig():计算方阵的特征向量
print('Eig:',lg.eig(arr)) #求矩阵arr的特征向量
scipy.linalg.svd():对矩阵进行奇异值分解
print('SVD:',lg.svd(arr)) #对矩阵arr进行svd分解
scipy.linalg.lu():对矩阵进行LU分解
print('LU:',lg.lu(arr)) #对矩阵arr进行lu分解
scipy.linalg.qr():对矩阵进行QR分解
print('QR:',lg.qr(arr)) #对矩阵arr进行qr分解
scipy.linalg.schur():对矩阵进行Schur分解
print('Schur:',lg.schur(arr)) #对矩阵arr进行Schur分解
scipy.linalg.solve():方程组求解
print('Sol:',lg.solve(arr,b)) #求方程组arr*x=b的解
来源:https://blog.csdn.net/zeye5731/article/details/122655546
猜你喜欢
- 在上次的爬虫中,抓取的数据主要用到的是第三方的Beautifulsoup库,然后对每一个具体的数据在网页中的selecter来找到它,每一个
- 本文实例讲述了python函数局部变量用法。分享给大家供大家参考。具体分析如下:当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其
- 简单邮件传输协议(SMTP)是一种协议,用于处理在电子邮件服务器之间发送电子邮件和路由电子邮件。Python提供了smtplib模块,该模块
- 春节休息了几天,今天上班第一天,最近混twitter混得比较多,经常要压缩URL,以前做了个书签用http://is.gd/压缩,后来发现了
- 相信很多人在使用正则表达式的时候都会遇到如下的语句:通过查阅正则表达式的API文档可以了解到正则表达式的语法知识:很多小伙伴就会产生疑问为什
- python代码如下:import numpy as np# Write a function that takes as input a
- 通常说到外键,只会提到“外键的目的是确定资料的参考完整性(referential integrity)。”,但是外键具体包含哪些动作和含义呢
- 在这篇入门教程中,我们假定你已经有了PHP语言程序、MySQL数据库、计算机网络通讯及XML语言基础。如果你还没有,那么请先学习相关知识。我
- 交互设计就是研究人与物体之间如何互动的问题,比如按电梯时,按钮立即高亮,同时屏幕上显示电梯现在所在楼层数,这个过程就是交互设计,而电梯按钮用
- 1、吃金币源码分享:import osimport cfgimport sysimport pygameimport randomfrom
- 我们在使用ASP 内置的ADO组件进行数据库编程时,通常是在脚本的开头打开一个连接,并在脚本的最后关闭它,但是就较大脚本而言,在多
- 除了第一年外,谷歌每年母亲节都会更换主页的logo以向全世界的母亲致敬。虽然2000年和2001年母亲节的logo图片看起来没什么不同,但是
- 思考一个问题:怎么实现在第一次检索的基础上进行二次检索?通常,我们的做法是第一次检索时保存检索条件,在第二次行检索时组合两次检索条件对数据库
- 进入:直接输入python即可,如图所示退出:1:输入exit(),回车2:输入quit(),回车3:输入ctrl+z,回车来源:https
- 数据库中提取长长的文章,总是有碍网页的排版布局。所以,想固定地提取一部分字符,然后后面有……替代。相关推荐:当标题不能显示完整的时候 1、原
- 一、判断类型的函数is_bool() //判断是否为布尔型is_float() //判断是否为浮点型
- 使用picasa的时候,注意到它首先是显示模糊的图片,然后图片突然变得清晰,这样做有一定的好处——picasa的图片翻页是用javascri
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 15 - SlidersMooTools 1.2的
- 阅读上一篇:FrontPage XP设计教程5——表单的设计 在制作出图文并茂的网页之后,很多读者朋友还想让自己的网页能够播放音乐、视频等多
- infer 这个关键字,整理记录一下,避免后面忘记了。有点难以理解呢。inferinfer 是在 typescript 2.8中新增的关键字