第2章【思考与练习3】随机游走轨迹模拟。将随机游走的步数增加到100步,计算物体最终与原点的距离。重复多次随机游走过程,观察物体与原点距离的变化趋势。
第2章 | 多维数据结构与运算。P33思考与练习。探究随机游走轨迹并探究终点与原点的距离。1、将随机游走的步数增加到100步,计算物体最终与原点的距离。2、重复多次随机游走过程,观察物体与原点距离的变化趋势。
·
P33思考练习题3
1.将随机游走的步数增加到100步,计算物体最终与原点的距离。
#第1题
#模拟每步生成方向
import numpy as np
steps = 100
rndwlk = np.random.randint(0,2,size = (2,steps))
rndwlk = np.where(rndwlk>0,1,-1)
print(rndwlk)
#计算每步移动后的位置
position = rndwlk.cumsum(axis = 1) #按行累加求和
print(position)
#计算每步移动后与原点的距离
dists = np.sqrt(position[0]**2+position[1]**2) #sqrt求平方根
print(dists)
print(round(dists[-1],4)) #格式化输出保留4位小数。round(数,保留位数)
2.重复多次随机游走过程,观察物体与原点距离的变化趋势。
此题在第1小题的基础上进行。先后分析100次,1000次,10000次随机游走100步后物体最终离原点的距离,得出结论:运行次数越多,越能发现物体在二维空间内随机游走100步后离原点的平均距离趋近(收敛)于一个数。(这个数为10,见下)
运用到了之后几章的知识:用Matplotlib绘制散点图分析距离数据及运用机器学习回归建模。
结论:在二维平面内随机选择方向走一个单位的长度,则n步之后离出发点的平均距离为根号n。数学推导如下:
运行100次:
import numpy as np
l = []
for i in range(100):
steps = 100
rndwlk = np.random.randint(0,2,size = (2,steps))
rndwlk = np.where(rndwlk>0,1,-1)
position = rndwlk.cumsum(axis = 1)
dists = np.sqrt(position[0]**2+position[1]**2)
l.append(round(dists[-1],2))
print(l)
#使用matplotlib绘制散点图,分析趋势
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize = (20,6)) #定义图形大小
plt.scatter(x = np.arange(1,101),y = l,marker = '*',c = 'red') #plt.scatter()函数画散点图
plt.show() #展示图形
#根据散点图分析,建立回归分析模型
x = np.arange(1,101).astype(float) #astype()函数强制类型转换为浮点型
Y = np.array(l) #将l列表转为数组
from sklearn.linear_model import LinearRegression
linreg = LinearRegression() #初始化模型
linreg.fit(x.reshape(-1,1),Y) #添加.reshape(-1,1)解决x单独一行/列不为二维数组出错的问题
print(linreg.intercept_,linreg.coef_) #输出回归模型截距,回归系数
结果 :
其中一次运行得到的次数与距离的回归方程:y = -0.008x+13.32
散点图如下:
运行1000次:
结果 :
其中一次运行得到的次数与距离的回归方程:y = 0.0008x+11.87
散点图如下:
运行10000次:
结果 :
其中一次运行得到的次数与距离的回归方程:y = -7.02e-06x+12.57
散点图如下:
由此可见,随着运行次数的增加,回归方程的回归系数越来越小,点被y=10这条线划分的界限越来越清晰。
更多推荐
已为社区贡献7条内容
所有评论(0)