Python中的NumPy。 第4部分

译者序


大家好,我们到了最后一部分。 祝您阅读愉快!
导航:


数学多项式


NumPy提供了使用多项式的方法。 通过传递根列表,您可以获得方程的系数:

>>> np.poly([-1, 1, 1, 10]) array([ 1, -11, 9, 11, -10]) 

在这里,数组返回与等式对应的系数: x411x3+9x2+11x10
也可以执行相反的操作:传递系数列表,根函数将返回多项式的所有根:

 >>> np.roots([1, 4, -2, 3]) array([-4.57974010+0.j , 0.28987005+0.75566815j, 0.28987005-0.75566815j]) 

请注意,在此等式中 x3+4x22x+3 有两个根是虚构的。
多项式系数可以积分。 让我们考虑整合 x3+x2+x+1x4/4+x3/3+x2/2+x+C 。 通常,常数C为零:

 >>> np.polyint([1, 1, 1, 1]) array([ 0.25 , 0.33333333, 0.5 , 1. , 0. ]) 

同样,可以采用导数:

 >>> np.polyder([1./4., 1./3., 1./2., 1., 0.]) array([ 1., 1., 1., 1.]) 

函数polyadd,polysub,polymul和polydiv还分别支持多项式系数的求和,减法,乘法和除法。
多项函数将给定值代入多项式。 考虑一个多项式 x32x2+2 在x = 4时:

 >>> np.polyval([1, -2, 0, 2], 4) 34 

总之,可以使用polyfit函数将给定阶数的多项式选择(插值)到一组值:

 >>> x = [1, 2, 3, 4, 5, 6, 7, 8] >>> y = [0, 2, 1, 3, 7, 10, 11, 19] >>> np.polyfit(x, y, 2) array([ 0.375 , -0.88690476, 1.05357143]) 

返回的数组是多项式系数的列表。 在SciPy中可以找到更复杂的插值功能。

统计资料


除了mean,var和std函数之外,NumPy还提供了一些其他方法来处理数组中的统计信息。
中位数可以这样找到:

 >>> a = np.array([1, 4, 3, 8, 9, 2, 3], float) >>> np.median(a) 3.0 

一些变量的相关系数被观察了几次,可以从以下形式的数组中找到:[[x1,x2,...],[y1,y2,...],[z1,z2,...],.. 。],其中x,y,z是不同的量子可观测量,数字表示“观测”的数量:

 >>> a = np.array([[1, 2, 1, 3], [5, 3, 1, 8]], float) >>> c = np.corrcoef(a) >>> c array([[ 1. , 0.72870505], [ 0.72870505, 1. ]]) 

我们有一个返回的数组c [i,j],其中存储了第i个和第j个量子可观对象的相关系数。
同样,可以找到协方差矩:

 >>> np.cov(a) array([[ 0.91666667, 2.08333333], [ 2.08333333, 8.91666667]]) 

随机数


每个模拟的重要部分是生成随机数的能力。 为此,我们在随机子模块的NumPy中使用内置的伪随机数生成器。 数字是随机的,即从种子号确定性地生成它们,但在统计上与随机图像相似。 要生成NumPy,请使用一种称为Mersenne Twister的特殊算法。
您可以如下指定随机数序列的生成元素:

 >>> np.random.seed(293423) 

种子是整数。 每个以相同种子开头的程序每次都会生成相同的数字序列。 这可能对调试很有用,但是通常我们不需要设置种子,实际上,当我们多次运行程序时,我们希望每次都获得不同的数字序列。 如果未执行此命令,则NumPy会自动选择一个随机种子(基于时间),每次程序启动时该种子都不同。
可以如下生成半间隔[0.0,1.0)中的随机数数组:

 >>> np.random.rand(5) array([ 0.40783762, 0.7550402 , 0.00919317, 0.01713451, 0.95299583]) 

rand函数可以用于生成二维数组,也可以使用reshape函数:

 >>> np.random.rand(2,3) array([[ 0.50431753, 0.48272463, 0.45811345], [ 0.18209476, 0.48631022, 0.49590404]]) >>> np.random.rand(6).reshape((2,3)) array([[ 0.72915152, 0.59423848, 0.25644881], [ 0.75965311, 0.52151819, 0.60084796]]) 

要在间隔[0.0,1.0)上生成一个随机数:

 >>> np.random.random() 0.70110427435769551 

要生成范围为[min,max)的随机整数,请使用randint(min,max)函数:

 >>> np.random.randint(5, 10) 9 

在我们的每个示例中,我们都从连续的均匀分布生成数字。 NumPy还包括用于其他分布的生成器,例如:Beta,二项式,卡方,Dirichlet,指数,菲舍尔,伽马,几何,Gambal,超几何,拉普拉斯,对数,对数正态,对数,多项式,多维正态,负二项式,非中心卡方,偏心菲舍尔,法线(高斯),帕累托,泊松,幂,瑞利,柯西,学生,三角形,冯·密斯,沃尔德,韦布尔和齐普夫。 让我们看两个例子。
要从λ= 6.0的离散泊松分布生成,

 >>> np.random.poisson(6.0) 5 

要从正态分布(高斯)生成一个数值,平均值为μ= 1.5,标准偏差σ= 4.0:

 >>> np.random.normal(1.5, 4.0) 0.83636555041094318 

要从正态分布中获得一个数字(μ= 0,σ= 1),而无需指定参数:

 >>> np.random.normal() 0.27548716940682932 

要生成多个值,请使用size参数:

 >>> np.random.normal(size=5) array([-1.67215088, 0.65813053, -0.70150614, 0.91452499, 0.71440557]) 

用于生成随机数的模块还可以用于在列表中随机分布值。 如果我们想随机分布列表中的值,这将很有用:

 >>> l = range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> np.random.shuffle(l) >>> l [4, 9, 5, 0, 2, 7, 6, 8, 1, 3] 

请注意,随机播放功能会修改现有数组,并且不会返回新数组。

一些其他信息


NumPy包含许多我们在此未提及的功能。 特别是这些功能可用于离散傅立叶变换,线性代数中更复杂的操作,测试数组的大小/尺寸/类型,拆分和连接数组,直方图,以任何方式从任何数据创建数组,创建和操作网格数组,具有特殊值(NaN,Inf),设置运算,创建不同类型的特殊矩阵以及计算特殊数学函数(例如:贝塞尔函数)。 您还可以查看NumPy文档以获取更多精确信息。

科学模块


SciPy很好地扩展了NumPy的功能。 我们不会谈论它的细节,但是会考虑它的一些可能性。 导入模块后,大多数SciPy函数均可用:

 >>> import scipy 

帮助功能提供有关SciPy的有用信息:

>>> help(scipy)
Help on package scipy:

NAME
scipy
FILE
c:\python25\lib\site-packages\scipy\__init__.py
DESCRIPTION
SciPy --- A scientific computing package for Python
===================================================
Documentation is available in the docstrings and
online at http://docs.scipy.org.

Contents
--------
SciPy imports all the functions from the NumPy namespace, and in
addition provides:

Available subpackages
---------------------
odr --- Orthogonal Distance Regression [*]
misc --- Various utilities that don't have
another home.sparse.linalg.eigen.arpack --- Eigenvalue solver using iterative methods. [*]
fftpack --- Discrete Fourier Transform algorithms[*]
io --- Data input and output [*]
sparse.linalg.eigen.lobpcg --- Locally Optimal Block Preconditioned Conjugate Gradient Method (LOBPCG) [*]
special --- Airy Functions [*]
lib.blas --- Wrappers to BLAS library [*]
sparse.linalg.eigen --- Sparse Eigenvalue Solvers [*]
stats --- Statistical Functions [*]
lib --- Python wrappers to external libraries [*]
lib.lapack --- Wrappers to LAPACK library [*]
maxentropy --- Routines for fitting maximum entropymodels [*]
integrate --- Integration routines [*]
ndimage --- n-dimensional image package [*]
linalg --- Linear algebra routines [*]
spatial --- Spatial data structures and algorithms[*]
interpolate --- Interpolation Tools [*]
sparse.linalg --- Sparse Linear Algebra [*]
sparse.linalg.dsolve.umfpack --- :Interface to the UMFPACK library: [*]
sparse.linalg.dsolve --- Linear Solvers [*]
optimize --- Optimization Tools [*]
cluster --- Vector Quantization / Kmeans [*]
signal --- Signal Processing Tools [*]
sparse --- Sparse Matrices [*]
[*] - using a package requires explicit import (see pkgload)
...

请注意,某些子模块直接需要其他导入,并用星号标记:

 >>> import scipy >>> import scipy.interpolate 

每个模块中的功能在内部docstrings和官方文档中都有详细记录。 它们中的大多数直接提供使用数值算法的功能,并且非常易于使用。 因此,SciPy可以节省大量的科学计算时间,因为 它提供了已经编写和测试的功能。
我们不会详细考虑SciPy,但是下表将介绍其一些功能:
模组用于什么
scipy.constants一组数学和物理常数
特殊的数学物理的许多特殊功能,例如:Airy,椭圆,贝塞尔,γ,β,超几何,抛物柱面,Mathieu,球面波,Struve,Kelvin。
科学整合使用梯形,Simpson,Romberg等方法进行数值积分的函数。 还提供了处理完整微分方程的方法。
scipy.optimize使用通用用户功能的标准高/低方法。 算法包括:Nelder-Mead,Pull( Powell ),共轭梯度,Bruden-Fletcher-Goldfarb-Channo,最小二乘法,条件优化,模拟退火,穷举搜索,Brent,Newton,二等分,Broyden,Anderson和线性搜索。
scipy.linalg与NumPy相比,使用线性代数的功能更广泛。 提供更多选项,用于对特定对象使用特殊和快速功能(例如:三对角矩阵)。 包括的方法:搜索非退化矩阵,搜索行列式,线性方程组的解,范数和伪逆矩阵的计算,频谱分解,奇异分解,LU分解,Cholesky分解,QR分解,Schur分解以及许多其他用于处理矩阵的数学运算。
稀疏的处理大型稀疏矩阵的函数
科学插值内插对象的方法和类,可用于离散数值数据。 一维和二维数据集可以使用线性和样条曲线( 注释转换器:平滑曲线的数学表示 )插值。
scipy.fftpack处理傅立叶变换的方法。
科学信号处理信号的方法,例如:函数卷积,相关,离散傅里叶变换,B样条平滑,滤波等。
统计数据庞大的统计功能和分布库,用于处理数据集。
一大批开发人员继续不断开发新的SciPy功能。 一个好的实用方法是:如果您想在代码中实现任何数值函数和方法,则可以先查看原始的SciPy文档。 可能有人已经实施了SciPy并为SciPy做出了贡献。

后记


我们的文章系列已经结束。 感谢所有阅读并花时间的人。 我也希望您能带来一些有用的信息并学到一些新知识。 继续开发和学习新事物! 待会儿见。

Source: https://habr.com/ru/post/zh-CN415373/


All Articles