所以我试过在圆上绘制点,做得很好,但现在我遇到了障碍
我使用了一种算法,该算法生成一对具有线性概率线的随机数,因此离0的最大值越近,选择该点的机会就越大
(在我的情况下,最大值为+-1[圆的直径为2])。
现在我想使用该算法生成X对,我可以使用这些对一次绘制所有点,我该如何做到这一点
(随机数算法来自Youtube视频https://www.youtube.com/watch?v=4y_nmpv-9lI伟大的视频BTW)
我的代码:
import random
import matplotlib.pyplot as plt
def sum_dist():
theta = random.random() * 2 * math.pi
r = random.random() + random.random()
if r >= 1:
r = 2 - r
if r <= -1:
r = 2 + r
#The random number algorithm
print((r * math.cos(theta), r * math.sin(theta)))
#This is to check if the numbers generated and what are they
x = r * math.cos(theta)
y = r * math.sin(theta)
circle1 = plt.Circle((0, 0), 1, color='blue', fill = False)
fig, ax = plt.subplots()
ax.add_patch(circle1)
plt.plot([x], [y], 'ro')
#plotting a single point in the circle
plt.plot([0], [0], 'ro')
#This is to Identify the center of the circle
plt.axis([0, 0, 0, 0])
plt.show()
plt.show()
sum_dist()
我相信你想要一个散点图,像这样:
import math
import random
import matplotlib.pyplot as plt
def sum_dist():
x = []
y = []
for _ in range(100):
theta = random.random() * 2 * math.pi
# r = random.random()
r = random.random() + random.random()
if r >= 1:
r = 2 - r
# This can't happen.
# if r <= -1:
# r = 2 + r
x.append( r * math.cos(theta) )
y.append( r * math.sin(theta) )
fig, ax = plt.subplots()
ax.set_aspect( 1 )
ax.add_artist( plt.Circle((0, 0), 1, ec='blue', fill = False) )
ax.axhline(y=0)
ax.axvline(x=0)
plt.axis( [-1,1,-1,1] )
plt.scatter(x, y, marker='o')
plt.plot([0], [0], 'ro')
plt.show()
sum_dist()
值得指出的是,numpy
可以在不使用循环的情况下以内联方式完成这一切。同样值得指出的是,将两个随机数相加并不会使它们变得更随机。CCD_ 2将完全相同。
CCD_ 3的所有操作都没有意义。您生成一个从0到2的随机数,然后镜像1到2之间的数字。镜像一个统一的随机序列是毫无意义的。它仍然是统一的。