亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Python
Python 教程中的 SciPy:什么是 |库和函数示例

Python 中的 SciPy

Python 中的 SciPy 是一个开源库,用于解决数学、科学、工程和技术问题。它允许用户使用各种高级 Python 命令来操作数据和可视化数据。 SciPy 建立在 Python NumPy 扩展之上。 SciPy 也读作“Sigh Pi”。

SciPy 的子包:

  • 文件输入/输出 - scipy.io
  • 特殊功能 - scipy.special
  • 线性代数运算 - scipy.linalg
  • 插值 - scipy.interpolate
  • 优化和适配——scipy.optimize
  • 统计和随机数 - scipy.stats
  • 数值积分 - scipy.integrate
  • 快速傅立叶变换——scipy.fftpack
  • 信号处理——scipy.signal
  • 图像处理 - scipy.ndimage

在本 Python SciPy 教程中,您将学习:

  • 什么是 SciPy?
  • 为什么使用 SciPy
  • Numpy VS SciPy
  • SciPy – 安装和环境设置
  • 文件输入/输出包:
  • 特殊功能包:
  • 使用 SciPy 的线性代数:
  • 离散傅立叶变换——scipy.fftpack
  • SciPy 中的优化和拟合——scipy.optimize
  • Nelder –Mead 算法:
  • 使用 SciPy 进行图像处理 – scipy.ndimage

为什么使用 SciPy
  • SciPy 包含各种子包,有助于解决与科学计算相关的最常见问题。
  • Python 中的 SciPy 包是最常用的科学库,仅次于用于 C/C++ 或 Matlab 的 GNU 科学库。
  • 易于使用和理解以及快速的计算能力。
  • 它可以对一组 NumPy 库进行操作。

Numpy VS SciPy

麻木:

SciPy:

SciPy – 安装和环境设置

您也可以通过 pip 在 Windows 中安装 SciPy

Python3 -m pip install --user numpy scipy 

在 Linux 上安装 Scipy

sudo apt-get install python-scipy python-numpy

在 Mac 上安装 SciPy

sudo 端口安装 py35-scipy py35-numpy

在开始学习 SciPy Python 之前,您需要了解基本功能以及 NumPy 数组的不同类型

导入 SciPy 模块和 Numpy 的标准方法:

from scipy import special #same for other modulesimport numpy as np

文件输入/输出包:

Scipy,I/O 包,具有​​广泛的功能,可以处理不同的文件格式,包括 Matlab、Arff、Wave、Matrix Market、IDL、NetCDF、TXT、CSV 和二进制格式。

让我们以 MatLab 中经常使用的一种文件格式 Python SciPy 为例:

 import numpy as np from scipy import io as sio array =np.ones((4, 4)) sio.savemat('example.mat', {'ar':array}) data =sio.loadmat(' example.mat', struct_as_record=True) data['ar']

输出:

array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1 ., 1., 1., 1.]])

代码说明

特殊功能包

help(scipy.special) 输出:NAME scipy.specialDESCRIPTION ==========================================特殊功能 (:mod:`scipy.special`) ==========================================.. module::scipy.special 下面的几乎所有函数都是通用函数,并遵循广播和自动数组循环规则。例外情况已注明。

三次根函数:

Cubic Root 函数求值的立方根。

语法:

scipy.special.cbrt(x)

示例:

from scipy.special import cbrt#用cbrt()函数求27&64的立方根cb =cbrt([27, 64])#打印cbprint(cb)的值

输出: 数组([3., 4.])

指数函数:

指数函数计算 10**x 元素。

示例:

from scipy.special import exp10#define exp10 函数并在其exp =exp10([1,10])print(exp)中传递值

输出:[1.e+01 1.e+10]

排列组合:

SciPy 还提供了计算排列和组合的功能。

组合 - scipy.special.comb(N,k)

示例:

from scipy.special import comb#find 5, 2 个值的组合使用 comb(N, k)com =comb(5, 2, exact =False, repeat=True)print(com)

输出:15.0

排列 -

scipy.special.perm(N,k)

示例:

from scipy.special import perm#find permutation of 5, 2 using perm (N, k) functionper =perm(5, 2, exact =True)print(per)

输出:20

对数和指数函数

Log Sum Exponential 计算和指数输入元素的对数。

语法:

scipy.special.logsumexp(x) 

贝塞尔函数

第N个整数阶计算函数

语法:

scipy.special.jn()

SciPy 的线性代数

现在让我们用 scipy.linalg, 做一些测试

计算行列式 一个二维矩阵,

from scipy import linalgimport numpy as np#define square matrixtwo_d_array =np.array([ [4,5], [3,2] ])#pass values to det() functionlinalg.det( two_d_array )

输出: -7.0

逆矩阵 -

scipy.linalg.inv()

Scipy的逆矩阵计算任何方阵的逆。

让我们看看,

from scipy import linalgimport numpy as np#define square matrixtwo_d_array =np.array([ [4,5], [3,2] ])#pass value to function inv()linalg.inv( two_d_array )

输出:

数组( [[-0.28571429, 0.71428571], [ 0.42857143, -0.57142857]] )

特征值和特征向量

scipy.linalg.eig()

示例

from scipy import linalgimport numpy as np#define 二维数组arr =np.array([[5,4],[6,3]])#pass value into functioneg_val, eg_vect =linalg.eig(arr)#get特征值print(eg_val)#get eigenvectorsprint(eg_vect)

输出:

[ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ]

离散傅立叶变换——scipy.fftpack

示例: 使用 Matplotlib 库进行挥手并展示。我们以 sin(20 × 2πt) 的简单周期函数为例

%matplotlib inlinefrom matplotlib import pyplot as pltimport numpy as np #Frequency 在 Hertzfre =5 方面 #Sample ratefre_samp =50t =np.linspace(0, 2, 2 * fre_samp, endpoint =False )a =np.sin( fre * 2 * np.pi * t)figure, axis =plt.subplots()axis.plot(t, a)axis.set_xlabel ('Time (s)')axis.set_ylabel ('信号幅度')plt.show ()

输出:

你可以看到这个。频率为 5 Hz,其信号在 1/5 秒内重复 - 称为特定时间段。

现在让我们借助 DFT 应用程序使用这个正弦波。

from scipy import fftpackA =fftpack.fft(a)frequency =fftpack.fftfreq(len(a)) * fre_sampfigure,axis =plt.subplots()axis.stem(frequency, np.abs(A))axis。 set_xlabel('Frequency in Hz')axis.set_ylabel('Frequency Spectrum Magnitude')axis.set_xlim(-fre_samp / 2, fre_samp/ 2)axis.set_ylim(-5, 110)plt.show()

输出:

SciPy 中的优化和适配 – scipy.optimize

%matplotlib inlineimport matplotlib.pyplot as pltfrom scipy import optimizeimport numpy as npdef function(a):return a*2 + 20 * np.sin(a)plt.plot(a, function(a))plt.show( )#使用BFGS算法优化optimize.fmin_bfgs(function, 0) 

输出:

优化成功终止。

当前函数值:-23.241676

迭代次数:4

功能评价:18

梯度评价:6

数组([-1.67096375])

optimize.basinhopping(function, 0)

输出:

fun:-23.241676238045315 minimum_optimization_result:fun:-23.241676238045315 hess_inv:array([[0.05023331]]) jac:array([4.76837158e] 消息成功终止:'07 nfev:15 nit:3 njev:5 status:0 success:True x:array([-1.67096375]) 消息:['请求的盆地跳跃迭代次数成功完成'] minimization_failures:0 nfev:1530 nit:100 njev:510 x :数组([-1.67096375])

Nelder –Mead 算法:

import numpy as npfrom scipy.optimize import minimum#define function f(x)def f(x):return .4*(1 - x[0])**2 optimize.minimize(f, [2, - 1], method="Nelder-Mead")

输出:

final_simplex:(array([[ 1. , -1.27109375], [ 1. , -1.27118835], [ 1. , -1.27113762]]), array([0., 0., 0.])) fun :0.0 消息:“优化已成功终止。” nfev:147 nit:69 状态:0 成功:True x:array([ 1., -1.27109375])

使用 SciPy 进行图像处理 – scipy.ndimage

示例: 我们以图像的几何变换为例

from scipy import miscfrom matplotlib import pyplot as pltimport numpy as np#get face image of panda from misc packagepanda =misc.face()#plot or show image of faceplt.imshow( panda )plt.show()

输出:

现在我们下翻 当前图像:

#Flip Down using scipy misc.face image flip_down =np.flipud(misc.face())plt.imshow(flip_down)plt.show()

输出:

示例: 使用Scipy旋转图像,

from scipy import ndimage, miscfrom matplotlib import pyplot as pltpanda =misc.face()#scipy for image的旋转函数——图像旋转135度panda_rotate =ndimage.rotate(panda, 135)plt.imshow(panda_rotate)plt.show ()

输出:

与 Scipy 集成 - 数值集成

示例: 现在以单一集成为例

这里a 是上限,b 是下限

from scipy import integration# take f(x) function as ff =lambda x :x**2#single integration with a =0 &b =1 integration =integr.quad(f, 0 , 1)print(integration )

输出:

(0.33333333333333337, 3.700743415417189e-15)

这里函数返回两个值,第一个值是积分,第二个值是积分估计误差。

示例:现在以 双重积分的 SciPy 示例为例。 我们找到以下方程的二重积分,

from scipy import integrationimport numpy as np#import square root function from math libfrom math import sqrt# set fuction f(x)f =lambda x, y :64 *x*y# 第二个积分的下限p =lambda x :0# 第一积分上限 q =lambda y :sqrt(1 - 2*y**2)# perform double integrationintegration =integration.dblquad(f , 0 , 2/4, p, q)print(integration)

输出:

(3.0, 9.657432734515774e-14)

您已经看到上面的输出与上一个相同。

总结

包名 说明
scipy.io
  • 文件输入/输出
scipy.special
  • 特殊功能
scipy.linalg
  • 线性代数运算
scipy.interpolate
  • 插值
scipy.optimize
  • 优化与适配
scipy.stats
  • 统计和随机数
scipy.integrate
  • 数值积分
scipy.fftpack
  • 快速傅立叶变换
scipy.signal
  • 信号处理
scipy.ndimage
  • 图像处理——

Python

  1. Python 运算符
  2. 检查 Python 对象的内存使用情况
  3. Python - 基本语法
  4. 在 Python 中使用表情符号
  5. Python @property 装饰器
  6. Python - 元组