这儿为numpy基础知识的最后一弹,内容主要有线性代数运算与随机数的生成
(一)线性代数运算
线性代数运算使用方式:
import numpy.linalg as alg
(二)随机数生成
在第二篇里面用到了随机数,这儿详细介绍一下
(1)生成一个多维正态分布的随机数组
In[49]: arr=np.random.normal(size=(4,4))
In[50]: arr
Out[50]:
array([[-0.9292644 , 0.59667119, 0.67925201, 1.11793723],
[ 0.1951411 , -1.52496088, -1.59018192, 0.26494354],
[-2.49287385, -1.17993629, -1.01977404, -0.79471872],
[-0.47717025, 0.72125487, -1.11406275, -0.9957009 ]])
(2)部分numpy.random函数
(2)随机漫步
生成一个随机数序列,步长随机为正负1,观察其累计求和的变化,下面为一个随机过程
import random
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示正负号
position=0
steps=1000
walk=[position]
for i in range(steps):
step=1 if random.randint(0,1) else -1
position+=step
walk.append(position)
plt.plot(walk)
plt.title('1000个数的随机漫步')
plt.show()
结果如下图:
这个时候就可以对本次随机漫步根据以上的知识做一些统计,例如极值,越过某个点的步长等,不再详述。
补充一点内容,同时实现多随机漫步,代码如下(10次随机过程),前面的代码同单次的,就不贴了
nwalks=10 #随机过程次数为10
nsteps=1000 #随机过程长度为1000
draws=np.random.randint(0,2,size=(nwalks,nsteps))
steps=np.where(draws>0,1,-1)
walks=steps.cumsum(1)
for i in walks:
plt.plot(i)
plt.title('10次随机漫步')
plt.show()
结果如下图: