Scipy

SciPy基础入门(二)

2017-08-10  本文已影响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()

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

解常微分方程

上一篇下一篇

猜你喜欢

热点阅读