听说点进蝈仔帖子的都喜欢点赞加关注~~
老规矩,官网附上,建议大佬直接看官网
https://www.scipy.org/
鸣谢:
https://zhuanlan.zhihu.com/p/38160864
https://www.jianshu.com/p/6c742912047f
简介
SciPy 是一个开源的 Python 算法库和数学工具包。
Scipy 是基于 Numpy 的科学计算库,用于数学、科学、工程学等领域,很多有一些高阶抽象和物理模型需要使用 Scipy。
单独安装方法:
注:安装numpy则无需单独安装scipy
SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
优化Optimization and root finding
给一个例子,内容太多了,大家自己看
from scipy.optimize import minimize
def eqn(x):
return x**2 + x + 2
mymin = minimize(eqn, 0, method='BFGS')
print(mymin)
再来一个官方的介绍把。
scipy.optimize.minimize(fun, x0, args=(), method='Nelder-Mead', bounds=None, tol=None, callback=None, options={'func': None, 'maxiter': None, 'maxfev': None, 'disp': False, 'return_all': False, 'initial_simplex': None, 'xatol': 0.0001, 'fatol': 0.0001, 'adaptive': False})
再给一个带结果的
# 定义要优化的函数,输入优化变量和参数
def f1(x,para):
return (x[0]**2+x[1]**2+para)
res = optimize.minimize(f1,[10,10],args=(20),method = 'SLSQP')
fun: 20.0
jac: array([0., 0.])
message: 'Optimization terminated successfully.'
nfev: 9
nit: 2
njev: 2
status: 0
success: True
x: array([0., 0.])
解方程
Scipy中也有专门的函数来求解方程。求解方程方法fsolve()可以是多个等式的或者单个等式。
import math
def f(x):
return [
5*x[1]+3,
4*x[0]**2 - 2*math.sin(x[1]*x[2]),
x[1]*x[2] - 1
]
optimize.root(f,[1,2,2])
或者
scipy.linalg.solve(a, b, sym_pos=False, lower=False, overwrite_a=False, overwrite_b=False, debug=None, check_finite=True, assume_a='gen', transposed=False)
稀疏矩阵求解
from scipy.sparse import csc_matrix
from scipy.sparse.linalg import spsolve
A = csc_matrix([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtype=float)
B = csc_matrix([[2, 0], [-1, 0], [2, 0]], dtype=float)
x = spsolve(A, B)
np.allclose(A.dot(x).toarray(), B.toarray())
True
各类积分计算
scipy.integrate.quad(func, a, b, args=(), full_output=0, epsabs=1.49e-08, epsrel=1.49e-08, limit=50, points=None, weight=None, wvar=None, wopts=None, maxp1=50, limlst=50)
蒙特卡洛
插值
方法太多了,大家慢慢探索。