在Python中生成一行上下的随机点

时间:2017-09-26 03:12:24

标签: 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()

Random point plot

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

4 个答案:

答案 0 :(得分:1)

有许多方法可行,但如果你的唯一要求是它们高于和低于y = mx + b线,那么你可以简单地将随机x值插入等式中,然后加或减一个随机y值

import random
import matplotlib.pyplot as plt

slope = 1
intercept = 0

def ymxb(slope, intercept, x):
    return slope * x + intercept

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 = [ymxb(slope, intercept, x) - random.randrange(start=1, stop=9) for x in x1]
y2 = [ymxb(slope, intercept, x) + random.randrange(start=1, stop=9) for x in x2]

plt.scatter(x1, y1, c='blue')
plt.scatter(x2, y2, c='red')
plt.show()

看起来像这样:

enter image description here

答案 1 :(得分:1)

您可以将var er = rep.replace(/\s*,\s*/g, " 0:00AM , "); y1的停止和起始限制更改为您想要的行。您需要确定飞机的终点(设置y2lower)。

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

upper

enter image description here

答案 2 :(得分:1)

你也可以得到我的答案。

这种方式将高斯噪声置于线上方和下方。我故意将噪音的平均值设置为20,以便它从线上突出,即y = 10 * x + 5.你可能会将平均值设为零。

>>> import random
>>> def y(x, m, b):
...     return m*x + b
... 
>>> import numpy as np
>>> X = np.linspace(0, 10, 100)
>>> y_above = [y(x, 10, 5) + abs(random.gauss(20,5)) for x in X]
>>> y_below = [y(x, 10, 5) - abs(random.gauss(20,5)) for x in X]
>>> import matplotlib.pyplot as plt
>>> plt.scatter(X, y_below, c='g')
>>> plt.scatter(X, y_above, c='r')
>>> plt.show()

这是情节。

scatter plot

答案 3 :(得分:0)

(x,y)的边由y - mx - b的符号定义。例如,您可以阅读它here

import random
import matplotlib.pyplot as plt

num_points = 50
x = [random.randrange(start=1, stop=9) for i in range(num_points)]
y = [random.randrange(start=1, stop=9) for i in range(num_points)]
m = 5
b = -3

colors = ['blue' if y[i] - m * x[i] - b > 0 else 'red' for i in range(num_points) ]
plt.plot([0, 10], [b, 10 * m + b], c='green')
plt.xlim((0, 10))
plt.ylim((0, 10))

plt.scatter(x, y, c=colors)
plt.show()

enter image description here