在Python中生成一条线上方和下方的随机点

jss*_*367 5 python random

我想在给定线上方或下方的 x,y 散点图上生成随机点。例如,如果线是 y=x,我想在图的左上角(线上方)生成一个点列表,并在图的右下角(线下方)生成一个点列表。这是一个示例,其中点高于或低于 y=5:

import random
import matplotlib.pyplot as plt

num_points = 10
x1 = [random.randrange(start=1, stop=9) for i in range(num_points)]
x2 = [random.randrange(start=1, stop=9) for i in range(num_points)]
y1 = [random.randrange(start=1, stop=5) for i in range(num_points)]
y2 = [random.randrange(start=6, stop=9) for i in range(num_points)]

plt.scatter(x1, y1, c='blue')
plt.scatter(x2, y2, c='red')
plt.show()
Run Code Online (Sandbox Code Playgroud)

随机点图

但是,我独立生成了 x 和 y 点,这将我限制为 y = c(其中 c 是常数)的方程。如何将其扩展为任何 y=mx+b?

Ger*_*ges 5

您可以更改停止和启动极限y1,并y2成为你想要的线路。您需要决定飞机的终点(设置lowerupper)。

请注意,这仅适用于整数。如果您想要更复杂的东西,您可以使用截断的多元分布。

m, b = 1, 0
lower, upper = -25, 25

x1 = [random.randrange(start=1, stop=9) for i in range(num_points)]
x2 = [random.randrange(start=1, stop=9) for i in range(num_points)]

y1 = [random.randrange(start=lower, stop=m*x+b) for x in x1]
y2 = [random.randrange(start=m*x+b, stop=upper) for x in x2]

plt.plot(np.arange(10), m*np.arange(10)+b)
plt.scatter(x1, y1, c='blue')
plt.scatter(x2, y2, c='red')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明