【水了一篇】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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析

    深度学习PyTorch,TensorFlow中GPU利用率较低,CPU利用率很低,且模型训练速度很慢的问题总结与分析在深度学习模型训练过程中,在服务器端或者本地pc端,输入nvidia-smi来观察显卡的GPU内存占用率(Memory-Usage),显卡的GPU利用率(GPU-util),然后采用top来查看CPU的线程数(PID数)和利用率(%CPU)。往往会发现很多问题,比如,GPU内存占用率低,显卡利用率低,CPU百分比低等等。接下来仔细分析这些问题和处理办法。1.GPU内存占用率问…

    2022年6月12日
  • 用户名为中文软件不能用_电脑用户名打不了中文

    用户名为中文软件不能用_电脑用户名打不了中文(软件必须要求路径和用户名都是英文,比如SystemVue和MATLAB)我安装matlab也是一路坎坷,一开始每次激活成功后就自动关闭,再次打开依旧提示激活,无论是在线激活还是本地选择license文件都不行(.lic文件是从Mathwork上登录后下载下来的)。讲道理是还有一年期限,不会过期的,但是试了好久启动不了。后来发现license文件放错了位置,应该放在安装目录下,如C:\Progr…

    2022年10月14日
  • voliate关键字原理

    voliate关键字原理被volatile修饰的变量在编译成字节码文件时会多个lock指令,该指令在执行过程中会生成相应的内存屏障,以此来解决可见性跟重排序的问题。voliate关键字作用静止重排序保证变量赋值操作的顺序与程序代码中的执行顺序一致。线程可见性原理使用场景…

    2022年5月2日
  • 解决报错(Navigation cancelled from “/roleList“ to “/userlist“ with a new navigation.)[通俗易懂]

    解决报错(Navigation cancelled from “/roleList“ to “/userlist“ with a new navigation.)[通俗易懂]写项目的时候,报了一个错,现在总结出来,希望可以帮助到你们。这个报错的原因:使用新导航取消了从“/roleList”到“/userlist”的导航。解决的方法:关于VueRouter报错路由

    2022年7月1日
  • windows10许可证即将过期怎么办,激活码激活_没有产品密钥怎么激活windows

    windows10许可证即将过期怎么办,激活码激活_没有产品密钥怎么激活windows来自:http://www.xuexila.com/diannao/xitong/win7/1316897.html会提示需要激活windows,不需要每隔两小时会重启一次,有些应用是运行不起来的。

    2022年8月2日
  • 人工势场法matlab讲解_【机器人路径规划】人工势场法

    人工势场法matlab讲解_【机器人路径规划】人工势场法阅读本文需要的基础知识为:理解机器人的构型空间。建议阅读:机器人运动规划中的Cspace怎样理解?为什么不直接在笛卡尔坐标系下运算呢?本文的实现程序与使用说明见我的学习工具箱:小明工坊:【个人开源】机器人运动规划学习工具箱使用说明基本原理1.概述我们打两个比方来说明人工势场法的作用机理。首先,我们把构型空间比作一个电势场平面,机器人(的当前构型)比作空间中一点。如果让机器人的起点和障碍物带正…

    2022年6月16日

发表回复

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

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