Scipy有很多子模块可以完成不同的操作,如傅里叶变换、插值运算、优化算法和数学统计等
文件输入输出
傅里叶变换
from scipy.fftpack import *
N = 500
f0 = 10
fs = 500
phy = [2*math.pi*f0*t/fs for t in range(N)]
sig = [math.cos(i) for i in phy]
sig_fft = fft(sig)
线性代数
解线性方程组
>>> from scipy.linalg import *
>>> A = np.array([[1,4,5], [6,4,2], [8,3,5]])
>>> b = np.array([4,6,8])
>>> x = solve(A,b)
>>> x
array([0.625, 0.375, 0.375])
计算特征值和特征向量
>>> evals = eigvals(A)
>>> evals
array([12.55508516+0.j, -4.52605043+0.j, 1.97096527+0.j])
>>> evals, evecs = eig(A)
>>> evecs
array([[ 0.48407924, 0.75702936, 0.05203827],
[ 0.50633806, -0.41420767, -0.77485696],
[ 0.71364491, -0.50531035, 0.62999104]])
特殊函数
在scipy.special中,有一些常用的函数,如
- 贝塞尔函数,比如scipy.special.jn() (第n个整型顺序的贝塞尔函数)
- 椭圆函数 (scipy.special.ellipj() Jacobian椭圆函数, …)
- Gamma 函数: scipy.special.gamma(), 也要注意 scipy.special.gammaln() 将给出更高准确数值的 Gamma的log。
- Erf, 高斯曲线的面积:scipy.special.erf()
最优化问题
from scipy import optimize
def f(x):
return 2*x**3 + (x-4)**2 + x**4
fig,ax = plt.subplots()
x = np.linspace(-3,3,200)
ax.plot(x,f(x))
y_min = optimize.fmin_bfgs(f, -2)
array([0.82600516])
概率统计
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
bins = np.arange(-10,10,0.5)
b = stats.norm.pdf(bins)
plt.figure()
plt.plot(bins, b)