SciPy 子包

2025年3月17日 | 阅读11分钟

在接下来的教程中,我们将学习 SciPy 包的子包。

什么是 SciPy?

SciPy 是一个开源的 Python 包,用于处理数学和科学问题。它基于 NumPy 扩展,并提供了大量用于数据处理和可视化的高级命令。由于 SciPy 依赖于 NumPy,如前所述,如果导入 SciPy,则无需单独导入 NumPy。

SciPy 与 NumPy

NumPy 和 SciPy 是用于数学和数值分析的两个 Python 库。NumPy 包含数组数据和基本操作(如排序和索引),而 SciPy 包含所有数值代码。虽然 NumPy 包含一些处理线性代数、傅里叶变换等问题的函数,但 SciPy 提供了这些功能以及更多功能的完整版本。然而,由于 SciPy 构建在 NumPy 之上,如果您在科学分析中使用 Python,则需要同时安装 NumPy 和 SciPy。

理解 SciPy 子包

下表列出了 SciPy 为不同科学计算提供的几个子包。

序号。名称描述
1cluster聚类算法
2constants物理和数学常数
3fftpack快速傅里叶变换例程
4integrate积分和常微分方程求解器
5interpolate插值和平滑样条
6Webhose.io输入和输出
7linalg线性代数
8ndimageN 维图像处理
9odr正交距离回归
10optimize优化和求根例程
11signal信号处理
12sparse稀疏矩阵及相关例程
13spatial空间数据结构和算法
14special特殊函数
15stats统计分布和函数

在使用这些包之前,必须先导入它们。

例如

在深入探讨每个函数的详细信息之前,我们先来了解一下 SciPy 和 NumPy 共享的基本函数。

基本函数

与 NumPy 的交互

由于 SciPy 基于 NumPy,您可以使用 NumPy 的函数来处理数组。您可以使用 help()、info() 或 source() 函数来详细了解这些函数。

help ():

help() 函数可用于获取任何函数的有关信息。此函数有两种使用方式:

  • 不带任何参数
  • 使用参数

执行上述代码后,第一个 help() 函数将返回有关 cluster 子模块的信息。当用户需要查找信息时,第二个 help() 函数会提示用户输入任何模块、关键字等名称。只需键入“quit”并按 Enter 键即可停止此函数。此函数返回所需的模块、函数等的详细信息。

info()

有关所需的模块、函数等的详细信息将从此函数返回。

source()

仅针对 Python 编写的对象,返回源代码。如果方法或对象是用其他语言(如 C)编写的,此函数不会产生任何相关信息。但如果您想使用此函数,可以按照以下方式使用:

特殊函数

SciPy 提供了许多特殊函数,包括椭圆函数、方便函数、伽马函数、贝塔函数等,这些函数在数学物理中都有应用。如前所述,您可以使用 help() 函数来查找每个函数。

三角函数和指数函数

您可以使用 SciPy 特殊函数包中的各种函数来解决三角学问题和确定指数。

请看以下示例

示例

输出

10000.0
32.0
0.8660254037844387
0.8660254037844387

您可以尝试使用 SciPy 特殊函数包中的各种其他函数。

积分函数

SciPy 提供了许多用于求解积分的函数。SciPy 是一系列例程,用于解决各种积分问题,从应用梯形法则计算积分到使用常微分方程积分器。

通用积分

为了确定单变量函数的积分,SiPy 有一个名为 quad 的函数。要表示无限积分限,可以将积分限表示为 ()。quad() 函数的语法如下:

示例

输出

(3.3425766251762377, 3.711005530844511e-14)

双重积分函数

SciPy 的 dblquad 函数可用于计算双重积分。我们都知道双重积分由两个实变量组成。除了决定积分限和 dy 和 dx 函数的另外四个变量外,要积分的函数将作为参数传递给 dblquad() 函数。

示例

输出

Result of double integration: (46.16666666666667, 5.835718000044804e-13)

您可以更深入地了解 SciPy 提供的用于计算三重积分、n 重积分、Romberg 积分等的各种其他函数。使用 help 函数可发现有关必要函数的所有信息。

优化函数

通过 scipy.optimize 的帮助函数,可以使用几种流行的优化技术。

本质上,它包括以下内容:

  • 多元标量函数的最小化,包括无约束和有约束的(例如,BFGS、牛顿共轭梯度、Nelder_mead 单纯形等)
  • 全局优化例程(例如,双退火和差分进化)
  • 曲线拟合和最小二乘法最小化(例如,least_squares、curve_fit 等)
  • 标量单变量函数的求根器和最小化器(例如,minimize_scalar 和 root_scalar)
  • 使用 Levenberg-Marquardt 和混合 Powell 技术的多元方程组求解器。

示例

输出

[ 2.00002132 -3.00000234  1.00004083  3.99995615 -2.00002776]

插值函数

在数值分析的背景下,插值是创建现有数据点集合内的新数据点的过程。SciPy 库的 scipy.interpolate 子包包含样条函数和类、一维和多维(单变量和多变量)插值类以及其他组件。

单变量插值

本质上,单变量插值是曲线拟合的一个分支,它确定最适合二维数据点集的曲线。SciPy 提供的 interp1d 函数可用于生成单变量插值。

示例

输出

SciPy Sub - Packages

多变量插值

多变量插值,也称为空间插值,是一种对具有多个变量的函数进行插值的方法。

示例

输出

SciPy Sub - Packages

傅里叶变换函数

从周期分量中恢复信号并将函数定义为这些分量的总和的过程称为傅里叶分析。可以使用 fft 函数获取实数或复数序列的离散傅里叶变换。

示例

输出

[22.-0.j -2.+2.j -2.-0.j -2.-2.j]

同样,您可以使用 ifft 函数查找此函数的逆,如下所示:

示例

输出

Original Data: [ 3  5  7  9 11]
FFT Result: [35.-0.j     -5.+6.8819096j  -5.+1.62459848j -5.-1.62459848j  -5.-6.8819096j ]
IFFT Result: [ 3.+0.j  5.+0.j  7.+0.j  9.+0.j 11.+0.j]

信号处理函数

分析、修改和合成信号(如音乐、图像等)称为信号处理。SciPy 提供的一些函数可用于设计、滤波和插值一维和二维数据。

过滤

本质上,滤波信号可以消除其中不需要的元素。order_filter 函数可用于执行有序滤波。本质上,此函数以有序方式过滤数组。此函数的作用如下:

语法

示例

输出

Original Data:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]
 [24 25 26 27 28 29]
 [30 31 32 33 34 35]
 [36 37 38 39 40 41]
 [42 43 44 45 46 47]]

Filtered Data:
[[ 0  1  2  3  4  0]
 [ 1  7  8  9 10  4]
 [ 7 13 14 15 16 10]
 [13 19 20 21 22 16]
 [19 25 26 27 28 22]
 [25 31 32 33 34 28]
 [31 37 38 39 40 34]
 [ 0 36 37 38 39  0]]

波形

此外,scipy.signal 子包还有许多用于生成波形的函数。Chirp 是其中一个函数。此函数是频率扫描余弦发生器,其语法如下:

语法

示例

输出

SciPy Sub - Packages

线性代数

向量空间和矩阵用于表示线性方程。基于 ATLAS LAPACK 和 BLAS 库,SciPy 以极快的速度求解线性代数问题。除了 numpy.linalg 中的所有功能外,scipy.linalg 还提供了一些更高级的功能。此外,如果 numpy.linalg 未与 ATLAS LAPACK 和 BLAS 支持一起使用,scipy.linalg 比 numpy.linalg 更快。

求矩阵的逆

在数学中,矩阵 A 的逆是矩阵 B,其中单位矩阵(用符号 B=A-1 表示)在主对角线上由 1 组成。SciPy 中的 linalg.inv 方法可用于检索此逆。

示例

输出

[[ 0.375  -0.4375]
 [-0.125   0.3125]]

求行列式

方阵的行列式是根据矩阵系数算术计算得到的值。这可以在 SciPy 中通过使用 det 函数来完成,该函数的作用如下:

语法

示例

输出

15.999999999999993

稀疏特征值

与线性方程相关的一组特殊标量称为特征值。

eigh() 函数用于解决复数厄米矩阵或实对称矩阵的广义特征值问题。

示例

输出

Computed Eigenvalues: [ 1.52121087  3.75828553  4.4066154  16.3138882 ]
Corresponding Eigenvectors:
[[ 0.3834471  -0.35238034  0.79785496 -0.30368384]
 [ 0.41302656 -0.52978277 -0.59858427 -0.4363899 ]
 [-0.77426254 -0.17798848  0.06360828 -0.6039798 ]
 [ 0.28791473  0.75065199 -0.03283771 -0.59375785]]

空间中的算法和数据结构

本质上,由线、点、面等构成的对象构成了空间数据。使用 Qhull 库,SciPy 的 scipy.spatial 包可以计算三角剖分、Voronoi 图等。它还包括用于最近邻点查询的 KDTree 实现。

Delaunay 三角剖分

当平面上的一组离散点在数学上进行三角剖分时,Delaunay 三角剖分是其中没有任何指定点位于任何三角形圆内的三角剖分。

示例

输出

SciPy Sub - Packages

多维图像处理函数

本质上,图像处理包括操作图像以提取信息或创建原始图像的更好版本。scipy.ndimage 包包含多种图像处理和分析例程,可以处理任何维度的数组。

相关和卷积

SciPy 提供了多个函数,可以对图像进行卷积和相关运算。

  1. correlate1d 函数可用于沿指定轴计算一维相关。
  2. correlate 函数可用于对任意给定数组与所选核进行多维相关。
  3. convolve1d 函数可用于沿指定轴计算一维卷积。
  4. convolve 函数可用于对任意给定数组与提供的核进行多维卷积。

示例

输出

[40 25 27 17 14 35 24 22]

下一主题SciPy 安装