《python编程:从入门到实践》随机漫步

深藏阁楼爱情的钟 2022-05-21 00:51 298阅读 0赞

创建一个模块放在 suiji_walk.py 当中:

  1. #coding=gbk
  2. #随机漫步
  3. #随机漫步是每次行走都是随机的,没有明确的方向, 结果是有一系列的随机决策所决定的。
  4. #建立一个随机漫步的类
  5. from random import choice
  6. import random
  7. class RandomWalk():
  8. def __init__(self, num_points = 5000):
  9. self.num_points = num_points
  10. self.x_values = [0] #输出第一个值得坐标为(0,0)为原点
  11. self.y_values = [0]
  12. #生成随机漫步的点, 并决定每次随机漫步的方向
  13. def fill_walk(self):
  14. #random.seed(123) #设置随机种子
  15. while len(self.y_values) < self.num_points :
  16. x_direction = choice([1,-1]) #在 -1 和 1 间选择 ,表示左右方向
  17. x_distance = choice([0,1,2,3,4])
  18. x_step = x_distance * x_direction
  19. y_direction = choice([1,-1]) #表示上下方向的变化
  20. y_distance = choice([0,1,2,3,4])
  21. y_step = y_direction *y_distance
  22. if x_step == 0 and y_step == 0:
  23. continue
  24. x_next= self.x_values[-1] + x_step #计算新一个点,将最新的点与步长相加
  25. y_next = self.y_values[-1] + y_step
  26. self.x_values.append(x_next) #存放到列表当中,方便下一步的数据可视化,总共有5000个点
  27. self.y_values.append(y_next)
  28. #绘制随机漫步图
  29. import matplotlib.pyplot as plt
  30. rw = RandomWalk()
  31. rw.fill_walk()
  32. plt.scatter(rw.x_values, rw.y_values,color='red',s=5) # s表示点的大小
  33. plt.savefig(r'C:\Users\Administrator\Desktop\mysal\Python\random_walk.png') #保存图片
  34. plt.show()

输出图像:

70

模拟多次随机漫步

创建一个模块放在 suiji_walk2.py 当中:

  1. #coding=gbk
  2. #模拟多次的随机漫步
  3. import matplotlib.pyplot as plt
  4. from suiji_walk import RandomWalk
  5. while True:
  6. rw= RandomWalk()
  7. rw.fill_walk()
  8. ponits_num = list(range(rw.num_points))
  9. #对随机漫步的进行先后顺序的着色
  10. plt.scatter(rw.x_values, rw.y_values , s=5, c=ponits_num, cmap=plt.cm.Blues,
  11. edgecolors='none')
  12. plt.show()
  13. active = input('\n 请输入 y/n')
  14. if active == 'n':
  15. break

70 1

绘制起点和终点,并隐藏坐标轴

创建一个模块放在 suiji_walk3.py 当中:

  1. #coding=gbk
  2. import matplotlib.pyplot as plt
  3. from suiji_walk import RandomWalk
  4. #重新绘制起点和终点
  5. while True:
  6. rw= RandomWalk()
  7. rw.fill_walk()
  8. ponits_num = list(range(rw.num_points))
  9. #对随机漫步的进行先后顺序的着色
  10. plt.scatter(rw.x_values, rw.y_values , s=5, c=ponits_num, cmap=plt.cm.Blues,
  11. edgecolors='none')
  12. #突出起点和终点
  13. plt.scatter(0,0, c='green',edgecolors='none',s=50)
  14. plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors= 'none', s=50)
  15. #隐藏坐标轴
  16. plt.axes().get_xaxis().set_visible(False)
  17. plt.axes().get_yaxis().set_visible(False)
  18. #调整尺寸以适应屏幕
  19. #plt.figure(dpi=128,figsize=(6,6))
  20. plt.show()
  21. active = input('\n 请输入 y/n')
  22. if active == 'n':
  23. break

70 2

50000个数据点的时候:

70 3


1240

发表评论

表情:
评论列表 (有 0 条评论,298人围观)

还没有评论,来说两句吧...

相关阅读