《python数据分析组键篇》之scipy

版权声明:所爱隔山海。 https://blog.csdn.net/tongxinzhazha/article/details/78525573

前言
scipy 包含的功能有最优化,线性代数,积分,插值,拟合常微分等等,是数据分析中完成数学计算最重要的库之一。

第一部分 scipy积分
quad 一元积分模块
quad(func, a, b, args=())
func函数; a:float 积分下限 ; b:积分上限; args 可选,tuple,func的参数
输出是 tuple(值,误差),数值积分是有误差的,所以提供了一个误差值

dbquad 二元积分模块
dblquad(func, a, b, gfun, hfun, args=())
func(x,y)二元函数,a,b是x的范围,gfun(x),hfun(x)是y的范围这里最好用lamaba,args()可选参数

nquad n元积分模块
nquad(func, ranges) func是函数,ranges:iterable object
范围的每个元素可能是2个数字的序列,从后到前的积分,和实际的积分写法是一样的。

import numpy as np
from scipy.integrate import quad,dblquad,nquad

def main():
    print quad(lambda x : np.exp(-x),0,np.inf)
    # np.inf 无穷大

    print dblquad(lambda t,x : np.exp(-x*t)/t**3,0,np.inf,lambda x:1,lambda x : np.inf)

    def f(x,y):
        return x*y
    def bound_y():
        return [0,0.5]
    def bound_x(y):
        return [0,1-2*y]
    print nquad(f,[bound_x,bound_y])

if __name__ == "__main__":
    main()

输出结果
(1.0000000000000002, 5.842606744944177e-11)
(0.33333333325010883, 1.3888461883425516e-08)
(0.010416666666666668, 4.101620128472366e-16)

scipy 优化器 Opteimizer

import numpy as np
from scipy.optimize import minimize
# 最小值模块
# minimize(fun, x0, optionalargs())
# x0 初始化数据
# option={"xtol":精读;"disp":中间过程}

def main():
    "全局最小值"
    def rosen(x):
        return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0+(1-x[:-1])**2.0)
    x0 = np.array([1.3,0.7,0.8,1.9,1.2])
    res = minimize(rosen,x0,method="nelder-mead",options={"xtol":1e-8,"disp":True})
    #res = minimize(rosen,x0,method="nelder-mead",options={"xtol":1e-8})
    print res
    # print res.x

if __name__ == "__main__":
    main()

输出
Optimization terminated successfully.
Current function value: 0.000000
Iterations: 339
Function evaluations: 571
final_simplex: (array([[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1.00000001, 1.00000001],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 1. ],
[ 1. , 1. , 1. , 1. , 0.99999999]]), array([ 4.86115343e-17, 7.65182843e-17, 8.11395684e-17,
8.63263255e-17, 8.64080682e-17, 2.17927418e-16]))
fun: 4.8611534334221152e-17
message: ‘Optimization terminated successfully.’
nfev: 571
nit: 339
status: 0
success: True
x: array([ 1., 1., 1., 1., 1.])

猜你喜欢

转载自blog.csdn.net/tongxinzhazha/article/details/78525573