美文网首页Scipy
SciPy基础入门(二)

SciPy基础入门(二)

作者: 不做大哥好多年 | 来源:发表于2017-08-10 16:05 被阅读432次

    SciPy线性代数-linalg

    Numpy和sciPy都提供了线性代数函数库linalg,SciPy更为全面:解线性方程组、最小二乘解、特征值和特征向量、奇异值分解...等。

    解线性方程组

    解线性方程组

    import numpy as np

    from scipy import linalg

    import timeit

    m,n = 50,50

    A = np.random.rand(m,n)

    B = np.random.rand(m,n)

    def my_func1():

           X1 = linalg.solve(A,B)

    def my_func2():

           X2 = np.dot(linalg.inv(A),B)

    t1 = timeit.Timer(stmt=my_func1).timeit(number=100)

    t2 = timeit.Timer(stmt=my_func2).timeit(number=100)

    print(t1,t2)

    特征值和特征向量

    n x n的矩阵A可以看作n维空间中的线性变换。

    如果x为n维空间中的一个向量,那么A与x的矩阵乘积是对x进行线性变换之后的向量。

    如果x是线性变换的特征向量,那么经过这个线性变换后,得到新向量仍与原来的x保持在同乙方向上,长度可能发生改变。

    特征向量的长度在该线性变换下缩放的比例称为其特征值。

    #特征值和特征向量-举例

    A = np.array([[1,-0.3],[-0.1,0.9]])

    evalues,evectors = linalg.eig(A)

    print(evalues)#特征值

    print(evectors)#特征向量

    奇异值分解-SVD

    Linalg库中的svd函数:对矩阵进行奇异值分解。其调用形式为:U,s,V = scd(M)

    #奇异值分解--举例

    A = np.array([[1,-0.3],[-0.1,0.9]])

    U,s,V = linalg.svd(A)

    print(U)

    print(s)

    print(V)

    SciPy的stats模块

    Stats模块包含了多种概率分布的随机变量

    连续随机变量是rv_continuous派生类的对象

    离散随机变量是rv_discrete派生类的对象

    连续概率分布、离散概率分布、核密度估计、二项分布、泊松部分、伽马分布、学生t-分布与t检验、卡方分布和卡方检验

    连续概率分布
    连续随机变量对象方法

    以正态分布为例,获取默认正态分布随机变量的期望值和方差:

    stats.norm.stats()

    Norm可以像函数一样使用,通过loc和scale参数可以指定随机变量的偏移和缩放参数。

    X.stats.norm(loc=1.0,scale=2.0)

    X.stats()

    调用随机变量x的rvs()方法,得到包含一万次随机取样值的数组x:

    x = X.rvs(size = 10000)#对随机变量取1000个值

    import numpy as np

    np.mean(x)

    np.var(x)

    使用mean()、var()计算此数组的均差和方差,其结果符合随机变量x的特性

    离散概率分布

    当分布函数的值域为离散时称之为离散概率分布

    例如:投掷有六个面的骰子时,获得1到6的整数,因此所得到的概率分布为离散的

    stats模块中离散分布随机变量都从rv_discrete类继承,也可以直接用rv_discrete类自定义离散概率分布。投掷骰子举例:

    1.数组x保存骰子的所有可能值

    2.数组p保存每个值出现的概率

    3.创建表示这个骰子的随机变量dice

    from scipy import stats

    x = range(1,7)

    p = (1.0/6,1.0/6,1.0/6,1.0/6,1.0/6,1.0/6)

    dice = stats.rv_discrete(values=(x,p))

    dice.rvs(size=20) #投掷此骰子20次,获得符合概率p的随机数

    中心极限定律:大量相互独立的随机变量,其均值的分布以正态分布为极限。如何验证?

    由于每一次投掷骰子可以看作一个独立的随机事件,投掷骰子50次的平均值可以看作“大量相互独立的随机变量”,其平均值的分布应该十分接近正态分布。

    import numpy as np

    samples = dice.rvs(size=(20000,50))

    samples_mean = np.mean(samples,axis=1)

    print(samples)

    print(samples_mean)

    核密度估计-举例

    1.前面例子中每个点是离散的,因此平均值也是离散的(直方图来显示)

    2.更平滑的显示样本的概率,进行kde.gaussian_kde()进行核密度估计

    3.核密度估计与拟合的正态分布十分相似

    核密度估计-举例
    核密度估计-举例

    SciPy数值积分-integtate

    integtate模块提供了几种数值积分算法,包括对常微分方程组(ODE)的数值积分。

    计算球体体积、解常微分方程

    球的体积求解
    球的体积求解-面积求解 球的体积求解-面积求解

    球的体积求解

    多重定积分可以通过多次调用quad()实现。integrage提供了:二重定积分 dblquad()、三重定积分 tplquad()

    球的体积求解 球的体积求解 球的体积求解 球的体积求解 球的体积求解

    解常微分方程

    相关文章

      网友评论

        本文标题:SciPy基础入门(二)

        本文链接:https://www.haomeiwen.com/subject/zkltrxtx.html