【发布时间】:2019-10-13 09:45:35
【问题描述】:
我编写了一个程序,该程序接受一个 N 值并生成 N 个点,其随机坐标介于 0 和 1 之间。如果这些点包含在以 0 为中心的半径为 1 的圆中,则这些点与红色相关联, 0,否则为蓝色。目标是输出包含所有点的示意图,并从中计算出 pi 的近似值。
我想让程序运行得更快,因为N值越高,它的精度越高,但运行时间越长。 例如我想运行 N=10 000 000
----------------main.py
#def
import matplotlib.pyplot as plt
from prototypes import point
r=0
#input
N=int(input("Nombre de tirages?"))
#compute
for N in range (1,N+1,1):
[x,y]=point()
if x**2 + y**2 > 1:
plt.scatter(x,y, s=1, c='b')
else:
plt.scatter(x,y, s=1, c='r')
r=r+1
p=((5/2)*N)/r
#output
plt.axis([0,1,0,1])
plt.title('Pour N={N}, une valeur approchée de Pi est {p}'.format(N=N,p=p))
plt.show()
----------------prototypes.py
import matplotlib.pyplot as plt
import random
#create a random point
def point():
x=random.random()
y=random.random()
return [x,y]
【问题讨论】:
-
我会尝试在 for 循环中收集列表中的所有点,而不是直接绘制它们!最后,只用收集的点列表调用 scatter 一次。
-
首先感谢您的回复。我对 python 和这个论坛很陌生,你能告诉我我可以实现这个的方式吗?
-
小事很重要:为什么要在这里声明一次性清单?
[x,y]=point()- 您可以改用x,y = point()。大约有 10k 个列表根本不需要构建
标签: python performance math optimization