【水了一篇】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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android之database disk image is malformed (code 11)

    做来电显示归属地和查询归属地功能的时候,需要从服务器下载数据库,但是下载之后,查询总是报错database disk image is malformed (code 11)开始以为是查询语句不对,后来意识到,跟之前解析包时出现错误是一样的问题,下载过程中格式损坏了。于是解决方法跟http://blog.csdn.net/jason0539/article/details/2174

    2022年3月11日
    39
  • golang二叉树遍历_2021年9月编程语言

    golang二叉树遍历_2021年9月编程语言usingMicrosoft.AspNetCore.Builder;usingMicrosoft.Extensions.DependencyInjection;usingMicrosoft.Extensions.Hosting;usingMicrosoft.OpenApi.Models;usingVolo.Abp;usingVolo.Abp.AspNetCore.Mvc;usingVolo.Abp.Autofac;usingVolo.Abp.Modularity;using

    2022年8月30日
    0
  • 怪盗基德的滑翔翼(最长上升子序列)「建议收藏」

    怪盗基德的滑翔翼(最长上升子序列)「建议收藏」最长上神子序列(nlogn)原题链接怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。而他最为突出的地方,就是他每次都能逃脱中村警部的重重围堵,而这也很大程度上是多亏了他随身携带的便于操作的滑翔翼。有一天,怪盗基德像往常一样偷走了一颗珍贵的钻石,不料却被柯南小朋友识破了伪装,而他的滑翔翼的动力装置也被柯南踢出的足球破坏了。不得已,怪盗基德只能操作受损的滑翔翼逃脱。假设城市中一共有N幢建筑排成一条线,每幢建筑的高度各不相同。初始时,怪盗基德可以在任何一幢建筑的顶端。他可以选择一个

    2022年8月8日
    1
  • 字符串中查找子串_cstring查找子字符串

    字符串中查找子串_cstring查找子字符串子串查询首先,我们来定义两个概念,主串和模式串。我们在字符串A中查找字符串B,则A就是主串,B就是模式串。我们把主串的长度记为n,模式串长度记为m。由于是在主串中查找模式串,因此,主串的长度肯定比模式串长,n>m。因此,字符串匹配算法的时间复杂度就是n和m的函数。假设要从主串s=“goodgoogle”中找到t=“google”子串。根据我们的思考逻辑,则有:首先,我们从主串s第1位开始,判断s的第1个字符是否与t的第1个字.

    2022年8月21日
    2
  • make menuconfig makefile kconfig详解

    make menuconfig makefile kconfig详解前面有一片文章分析makemenuconfig执行过程:http://blog.csdn.net/xinyuan510214/article/details/50964808今天,将一下makemenuconfigmakefilekconfig等几个容易混淆的关键操作。===1、内核Makefile概述(linux2.6)Linux内核的Makefile分为5个部分

    2022年5月27日
    61
  • c语言gdi绘图_程序设计的基本步骤是

    c语言gdi绘图_程序设计的基本步骤是本文将实现对基本图形的绘制:windows程序画图,大体上有3种方法:(1)你告诉系统点的坐标和颜色,系统通过SetPixel来画。类似的,通过GetPixel来获取某一点像素值。(2)使用MoveToEx、LineTo来划线,MoveToEx设置起点坐标,LineTo设置终点坐标,或者使用Polyline函数,这个函数接受一个POINT类型的数组,通过数组里的点连线。(3)windows…

    2022年8月18日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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