【水了一篇】Scipy简单介绍

【水了一篇】Scipy简单介绍Scipy是基于Numpy的科学计算库,用于数学、科学、工程学等领域

大家好,又见面了,我是你们的朋友全栈君。


1 简介

Scipy是基于Numpy的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用Scipy。SciPy包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。

使用之前需要正确安装scipy模块,我使用的是anaconda的jupyter notebook,已内置scipy,不需要再进行安装。示例代码如下:

>>> from scipy import constants
>>> print(constants.acre) #输出一英亩为多少平方米
4046.8564223999992

以下列出了SciPy常用的一些模块:

模块名 功能
scipy.cluster 向量量化
scipy.constants 数学常量
scipy.fft 快速傅里叶变换
scipy.integrate 积分
scipy.interpolate 插值
scipy.io 数据输入输出
scipy.linalg 线性代数
scipy.misc 图像处理
scipy.ndimage N维图像
scipy.odr 正交距离回归
scipy.optimize 优化算法
scipy.signal 信号处理
scipy.sparse 稀疏矩阵
scipy.spatial 空间数据结构和算法
scipy.special 特殊数学函数
scipy/stats 统计函数

2 常量模块

SciPy常量模块constants提供了许多内置的数学常数。以下实例输出圆周率:

>>> from scipy import constants
>>> constants.pi
3.141592653589793

以下实例输出黄金比例:

>>> constants.golden
1.618033988749895

可用dir()函数来查看constants模块包含了哪些常量:

>>> dir(constants)
['Avogadro', 'Boltzmann', 'Btu', 'Btu_IT', 'Btu_th', 'ConstantWarning', 'G', 'Julian_year', 'N_A', 'Planck', 'R', 'Rydberg', 'Stefan_Boltzmann', 'Wien', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__', '_obsolete_constants', 'acre', 'alpha', 'angstrom', 'arcmin', 'arcminute', 'arcsec', 'arcsecond', 'astronomical_unit', 'atm', 'atmosphere', 'atomic_mass', 'atto', 'au', 'bar', 'barrel', 'bbl', 'blob', 'c', 'calorie', 'calorie_IT', 'calorie_th', 'carat', 'centi', 'codata', 'constants', 'convert_temperature', 'day', 'deci', 'degree', 'degree_Fahrenheit', 'deka', 'dyn', 'dyne', 'e', 'eV', 'electron_mass', 'electron_volt', 'elementary_charge', 'epsilon_0', 'erg', 'exa', 'exbi', 'femto', 'fermi', 'find', 'fine_structure', 'fluid_ounce', 'fluid_ounce_US', 'fluid_ounce_imp', 'foot', 'g', 'gallon', 'gallon_US', 'gallon_imp', 'gas_constant', 'gibi', 'giga', 'golden', 'golden_ratio', 'grain', 'gram', 'gravitational_constant', 'h', 'hbar', 'hectare', 'hecto', 'horsepower', 'hour', 'hp', 'inch', 'k', 'kgf', 'kibi', 'kilo', 'kilogram_force', 'kmh', 'knot', 'lambda2nu', 'lb', 'lbf', 'light_year', 'liter', 'litre', 'long_ton', 'm_e', 'm_n', 'm_p', 'm_u', 'mach', 'mebi', 'mega', 'metric_ton', 'micro', 'micron', 'mil', 'mile', 'milli', 'minute', 'mmHg', 'mph', 'mu_0', 'nano', 'nautical_mile', 'neutron_mass', 'nu2lambda', 'ounce', 'oz', 'parsec', 'pebi', 'peta', 'physical_constants', 'pi', 'pico', 'point', 'pound', 'pound_force', 'precision', 'proton_mass', 'psi', 'pt', 'short_ton', 'sigma', 'slinch', 'slug', 'speed_of_light', 'speed_of_sound', 'stone', 'survey_foot', 'survey_mile', 'tebi', 'tera', 'test', 'ton_TNT', 'torr', 'troy_ounce', 'troy_pound', 'u', 'unit', 'value', 'week', 'yard', 'year', 'yobi', 'yotta', 'zebi', 'zepto', 'zero_Celsius', 'zetta']

常量模块包含以下几种单位:公制单位,二进制,以字节为单位,质量单位,角度换算,时间单位,长度单位,压强单位,体积单位,速度单位,温度单位,能量单位,功率单位,力学单位等。

国际单位制词头:(英语:SI prefix)表示单位的倍数和分数,目前有20个词头,大多数是千的整数次幂。如:

kilo 103
deci 10-1
micro 10-6
centi 10-2
>>> constants.kilo
1000.0
>>> constants.deci
0.1
>>> constants.micro
1e-06
>>> constants.centi
0.01

二进制前缀:返回字节单位。如:

kibi 210
mebi 220
gibi 230
>>> constants.kibi
1024
>>> constants.mebi
1048576

质量单位:返回多少千克kg。如:

>>> constants.gram #1克
0.001
>>> constants.metric_ton #1吨
1000.0
>>> constants.pound #1磅
0.45359236999999997

角度单位:返回弧度。

>>> constants.degree #π/180
0.017453292519943295

时间单位:返回秒数。

>>> constants.minute
60.0
>>> constants.hour
3600.0

长度单位:返回米数。

>>> constants.inch #英寸
0.0254
>>> constants.mile #英里
1609.3439999999998

面积单位:返回多少平方米,平方米是面积的公制单位,其定义是:在一平面上,边长为一米的正方形之面积。

>>> constants.acre #英亩
4046.8564223999992
>>> constants.hectare #公顷
10000.0

体积单位:返回多少立方米,立方米是容量计量单位,1立方米的容量相当于一个长、宽、高都等于1米的立方体的体积。

>>> constants.gallon #加仑
0.0037854117839999997

速度单位:返回每秒多少米。 #音速

>>> constants.speed_of_sound
340.5

3 优化器

SciPy的optimize模块提供了常用的最优化算法函数实现,可以直接调用这些函数完成某些优化问题,比如查找函数的最小值或方程的根等。NumPy能够找到多项式和线性方程的根,但它无法找到非线性方程的根,如x+cos(x)。可以使用SciPy的optimze.root函数,这个函数需要两个参数:

  • fun-表示方程的函数。
  • x0-根的初始猜测。

该函数返回一个对象,其中包含有关解决方案的信息。实际解决方案在返回对象的属性x,查看如下实例,查找x+cos(x)方程的根:

>>> from scipy.optimize import root
>>> from math import cos
>>> def eqn(x):
...     return x+cos(x)
...
>>> myroot=root(eqn,0)
>>> myroot.x
array([-0.73908513])
>>> myroot
fjac: array([[-1.]])
fun: array([0.])
message: 'The solution converged.'
nfev: 9
qtf: array([-2.66786593e-13])
r: array([-1.67361202])
status: 1
success: True
x: array([-0.73908513])

可以使用scipy.optimize.minimize()函数来最小化函数,这里不详细介绍,请看这里


4 稀疏矩阵

稀疏矩阵(英语:sparse matrix)指的是在数值分析中绝大多数数值为零的矩阵。反之,如果大部分元素都非零,则这个矩阵是稠密的(Dense)。
在这里插入图片描述
上述稀疏矩阵仅包含9个非零元素,另外包含26个零元。SciPy的scipy.sparse模块提供了处理稀疏矩阵的函数。主要使用以下两种类型的稀疏矩阵:

  • CSC-压缩稀疏列(Compressed Sparse Column),按列压缩。
  • CSR-压缩稀疏行(Compressed Sparse Row),按行压缩。

本节主要使用CSR矩阵。通过向scipy.sparse.csr_matrix()函数传递数组来创建一个CSR矩阵:

>>> import numpy as np
>>> from scipy.sparse import csr_matrix
>>> arr=np.array([0,0,0,0,0,1,1,0,2])
>>> print(csr_matrix(arr))
(0, 5)        1
(0, 6)        1
(0, 8)        2

结果解析:

第一行:在矩阵第一行(索引值0)第六(索引值5)个位置有一个数值1。
第二行:在矩阵第一行(索引值0)第七(索引值6)个位置有一个数值1。
第三行:在矩阵第一行(索引值0)第九(索引值8)个位置有一个数值2。

用data属性查看存储的数据(不含0元素):

>>> arr=np.array([[0,0,0],[0,0,1],[1,0,2]])
>>> arr
array([[0, 0, 0],
[0, 0, 1],
[1, 0, 2]])
>>> csr_matrix(arr).data
array([1, 1, 2], dtype=int32)

用count_nonzero()方法计算非0元素的总数:

>>> arr=np.array([[0,0,0],[0,0,1],[1,0,2]])
>>> csr_matrix(arr).count_nonzero()
3

5 图结构

图是各种关系的节点和边的集合,节点是与对象对应的顶点,边是对象之间的连接。SciPy提供了scipy.sparse.csgraph模块来处理图结构。

用scipy模块可以对图使用:

1、dijkstra最短路径算法;

2、floyd算法;

3、bellman ford算法;

4、dfs、bfs算法等图算法。

这里不详细介绍,请看这里


6 空间数据

空间数据又称几何数据,它用来表示物体的位置、形态、大小分布等各方面的信息,比如坐标上的点。SciPy通过scipy.spatial模块处理空间数据,比如判断一个点是否在边界内、计算给定点周围距离最近点以及给定距离内的所有点。

这里不详细介绍,请看这里

还有【matlab数组】、【插值】、【显著性检验】,估计用不到,就不整理了。


END

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/153478.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号