




随机生成5000个点,画出散点图为什么是一条直线,不像是随机
关注引自免费微信小程序:皆我百晓生
在Python编程语言中,如果你想要生成一个随机游走路径并将其绘制为一条直线,你可以采用以下步骤实现:
首先,导入所需的库,包括matplotlib.pyplot用于图形处理,numpy用于数学计算和随机数生成,以及random模块提供全局随机数生成功能。
import numpy as np
import matplotlib.pyplot as plt
from random import choice
接下来,创建一个名为RandomWalk的类,继承自numpy.random.RandomState(也可以用numpy.random.MersenneTwister)类,以便实现不同的随机种子和步长。
class RandomWalk(NumpyRandom.RandomState):
def __init__(self, num_points=5000, seed=None):
super().__init__(seed)
# 初始化 x 和 y 坐标数组
self.x_value = np.linspace(0, 10, num_points, endpoint=False)
self.y_value = np.linspace(0, 10, num_points, endpoint=False)
def generate_random_walk(self):
# 使用 `choice()` 函数从给定列表中选择随机步长和方向
step_size = choice(range(1, 5)) if self.seed is None else self.seed
direction = choice([-1, 1]) if self.seed is None else self.seed
# 根据起点和目标终点,生成新的 x 和 y 坐标
x_step = step_size * direction
y_step = step_size * direction
# 定义一个函数来绘制随机游走路径
def draw_path():
# 将当前 x 和 y 坐标添加到列表中
self.x_value.extend(x_step)
self.y_value.extend(y_step)
# 使用 `scatter()` 函数将生成的 x 和 y 坐标绘制成散点图
fig, ax = plt.subplots()
scatter(self.x_value, self.y_value, s=15, c='r', edgecolor='black')
ax.axis('equal')
ax.set_xlabel('X-axis')
ax.set_ylabel('Y-axis')
ax.set_title(f'Random Walk Path: {self.num_points} points')
plt.show()
# 调用 `generate_random_walk()` 函数生成随机游走路径
draw_path()
# 创建一个 RandomWalk 实例
rw = RandomWalk()
# 随机生成5000个 x 和 y 坐标
random_walk = rw.generate_random_walk()
# 绘制随机游走路径
draw_path()
在上述代码中,首先定义了一个名为 RandomWalk 的类,它继承自 numpy.random.RandomState 类。然后,在 __init__ 方法中设置了随机种子,如果没有指定,则初始化为全局默认种子 0。这样,每次调用 random_walk.generate_random_walk() 函数时,都会产生一个相同的随机种子。
在 generate_random_walk() 函数中,我们使用了 choice() 函数选择一个从0到4之间的随机步长 step_size。同时,我们也通过设置另一个随机方向 -1 或 +1 来确保路径与二维平面上的一条直线上行行走,且该路径向右移动时,长度不变,向左移动时,长度减半。在 direction 变量中,我们指定了正向、反向或径向移动的方向。根据路径的起始点 x_value 和目标终点 y_value,我们将这些值分别填充到一个新的 x_value 和 y_value 数组中,并使用 scatter() 函数将生成的 x 和 y 坐标绘制成散点图。
最后,我们创建了一个 RandomWalk 实例,并随机生成了5000个 x 和 y 坐标,然后调用 draw_path() 函数绘制这个随机游走路径。这段代码实现了随机游走路径绘制为一条直线的功能,使用了 Python 的相关库和数据结构。在这个例子中,我使用了 scatter() 函数来创建散点图,但可以替换为其他绘图方法,例如 plot()、line()、polyline() 等,满足不同场景的需求。