大家好,又见面了,我是你们的朋友全栈君。
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账号...