本文非常全面的介绍了Scipy库,希望大家有耐心的看下去。参考链接在最后。
目录:
1. Scipy简介
1.1 子包
1.2 数据结构
2. Scipy开发环境安装
2.1 Windows
2.2 Linux
3. Scipy基本功能
3.1 内在Numpy数组创建
3.2 矩阵
4. Scipy簇聚
4.1 Scipy中实现K-Means
4.2 三个集群计算K均值
5. Scipy常量
5.1 Scipy常量包
5.2 可用常量列表
6. FFTpack
6.1 快速傅立叶变换
6.2 离散余弦变换
7. 积分
7.1 单积分
7.2 多重积分
7.3 双重积分
8. 插值
8.1 插值是什么
8.2 一线插值
8.3 样条曲线
9. 输入/输出
10. Linalg
10.1 线性方程组
10.2 查找行列式
10.3 特征向量与特征值
11. Ndimage
11.1 打开与写入图像文件
11.2 滤镜
11.3 边缘检测
12. 优化算法
12.1 Nelder-Mead单纯形算法
12.2 最小二乘
13. 统计函数
14. CSGraph
15. Scipy空间
16. Scipy ODR
17. Scipy特殊包
----------------------------------------------------------------------------------
7. Scipy积分
当一个函数不能被分析积分,或者很难分析积分时,通常会转向数值积分方法。 SciPy有许多用于执行数值积分的程序。 它们中的大多数都在同一个scipy.integrate库中。 下表列出了一些常用函数。
7.1 单积分
Quad函数是SciPy积分函数的主力。 数值积分有时称为正交积分,因此称为名称。 它通常是在a到b给定的固定范围内执行函数f(x)的单个积分的默认选择。
quad的一般形式是scipy.integrate.quad(f,a,b),其中'f'是要积分的函数的名称。 而'a'和'b'分别是下限和上限。 下面来看看一个高斯函数的例子,它的积分范围是0和1。
首先需要定义这个函数:
这可以使用lambda表达式完成,然后在该函数上调用四方法。
import scipy.integrate
from numpy import exp
f=lambdax:exp(-x**2)
i=scipy.integrate.quad(f,0,1)
print(i)
执行上面示例代码,得到以下结果 -
(0.7468241328124271, 8.291413475940725e-15)
四元函数返回两个值,其中第一个数字是积分值,第二个数值是积分值绝对误差的估计值。
注 - 由于quad需要函数作为第一个参数,因此不能直接将exp作为参数传递。 Quad函数接受正和负无穷作为限制。 Quad函数可以积分单个变量的标准预定义NumPy函数,如exp,sin和cos。
双重和三重积分的机制已被包含到函数dblquad,tplquad和nquad中。 这些函数分别积分了四个或六个参数。 所有内积分的界限都需要定义为函数。
dblquad的一般形式是scipy.integrate.dblquad(func,a,b,gfun,hfun)。 其中,func是要积分函数的名称,'a'和'b'分别是x变量的下限和上限,而gfun和hfun是定义变量y的下限和上限的函数名称。
看看一个执行双重积分方法的示例。
使用lambda表达式定义函数f,g和h。 请注意,即使g和h是常数,它们可能在很多情况下必须定义为函数,正如在这里为下限所做的那样。
import scipy.integrate
from numpy import exp
from math import sqrt
f=lambdax,y:16*x*y
g=lambdax:0
h=lambday:sqrt(1-4*y**2)
i=scipy.integrate.dblquad(f,0,0.5,g,h)
print(i)
执行上面示例代码,得到以下结果 -
(0.5, 1.7092350012594845e-14)
除上述例程外,scipy.integrate还有许多其他积分的程序,其中包括执行n次多重积分的nquad以及实现各种集成算法的其他例程。 但是,quad和dblquad将满足对数值积分的大部分需求。
8. Scipy插值
8.1 插值是什么?
插值是在直线或曲线上的两点之间找到值的过程。 为了帮助记住它的含义,我们应该将“inter”这个词的第一部分想象为“输入”,表示要查看原来数据的“内部”。 这种插值工具不仅适用于统计学,而且在科学,商业或需要预测两个现有数据点内的值时也很有用。
下面创建一些数据,看看如何使用scipy.interpolate包进行插值。
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x=np.linspace(0,4,12)
y=np.cos(x**2/3+4)
print(x,y)
执行上面示例代码,得到以下结果 -
[ 0. 0.36363636 0.72727273 1.09090909 1.45454545 1.81818182
2.18181818 2.54545455 2.90909091 3.27272727 3.63636364 4. ] [-0.65364362 -0.61966189 -0.51077021 -0.31047698 -