创建一个模块放在 suiji_walk.py 当中:
#coding=gbk
#随机漫步
#随机漫步是每次行走都是随机的,没有明确的方向, 结果是有一系列的随机决策所决定的。
#建立一个随机漫步的类
from random import choice
import random
class RandomWalk():
def __init__(self, num_points = 5000):
self.num_points = num_points
self.x_values = [0] #输出第一个值得坐标为(0,0)为原点
self.y_values = [0]
#生成随机漫步的点, 并决定每次随机漫步的方向
def fill_walk(self):
#random.seed(123) #设置随机种子
while len(self.y_values) < self.num_points :
x_direction = choice([1,-1]) #在 -1 和 1 间选择 ,表示左右方向
x_distance = choice([0,1,2,3,4])
x_step = x_distance * x_direction
y_direction = choice([1,-1]) #表示上下方向的变化
y_distance = choice([0,1,2,3,4])
y_step = y_direction *y_distance
if x_step == 0 and y_step == 0:
continue
x_next= self.x_values[-1] + x_step #计算新一个点,将最新的点与步长相加
y_next = self.y_values[-1] + y_step
self.x_values.append(x_next) #存放到列表当中,方便下一步的数据可视化,总共有5000个点
self.y_values.append(y_next)
#绘制随机漫步图
import matplotlib.pyplot as plt
rw = RandomWalk()
rw.fill_walk()
plt.scatter(rw.x_values, rw.y_values,color='red',s=5) # s表示点的大小
plt.savefig(r'C:\Users\Administrator\Desktop\mysal\Python\random_walk.png') #保存图片
plt.show()
输出图像:
模拟多次随机漫步
创建一个模块放在 suiji_walk2.py 当中:
#coding=gbk
#模拟多次的随机漫步
import matplotlib.pyplot as plt
from suiji_walk import RandomWalk
while True:
rw= RandomWalk()
rw.fill_walk()
ponits_num = list(range(rw.num_points))
#对随机漫步的进行先后顺序的着色
plt.scatter(rw.x_values, rw.y_values , s=5, c=ponits_num, cmap=plt.cm.Blues,
edgecolors='none')
plt.show()
active = input('\n 请输入 y/n')
if active == 'n':
break
绘制起点和终点,并隐藏坐标轴
创建一个模块放在 suiji_walk3.py 当中:
#coding=gbk
import matplotlib.pyplot as plt
from suiji_walk import RandomWalk
#重新绘制起点和终点
while True:
rw= RandomWalk()
rw.fill_walk()
ponits_num = list(range(rw.num_points))
#对随机漫步的进行先后顺序的着色
plt.scatter(rw.x_values, rw.y_values , s=5, c=ponits_num, cmap=plt.cm.Blues,
edgecolors='none')
#突出起点和终点
plt.scatter(0,0, c='green',edgecolors='none',s=50)
plt.scatter(rw.x_values[-1],rw.y_values[-1],c='red',edgecolors= 'none', s=50)
#隐藏坐标轴
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
#调整尺寸以适应屏幕
#plt.figure(dpi=128,figsize=(6,6))
plt.show()
active = input('\n 请输入 y/n')
if active == 'n':
break
50000个数据点的时候: