Python实现单位圆内均匀分布随机点的算法与代码
本文介绍在Python中生成均匀分布在单位圆内随机点的方法。通过先生成圆周上的点,再对半径进行平方根变换,确保点在圆内均匀分布。提供完整代码示例及可视化效果,帮助开发者理解相关算法原理。
Python内置的随机函数可以生成[0,1)区间内的随机数。若需生成均匀分布在单位圆内的点,一种直观思路是先生成圆周上的点,再随机调整其到原点的距离。然而,直接对距离进行[0,1]均匀采样会导致点分布不均,因为面积与半径的平方成正比,距离的分布需与扇形面积相关联。
为实现均匀分布,我们引入另一个随机函数生成[0,1)区间的随机数r。若r小于s0,其概率为s0。当r=0时,对应距离为0;当r=1时,对应距离为1。假设生成m个随机数,其中小于s0的数量约为s0*m,这些点对应扇形面积的s0倍处(如图2所示的小扇形区域)。该区域内点的数量应为s0*m,此时扇形边长为s0^0.5。因此,s0对应的距离应为s0^0.5,映射函数为y=x^0.5(见图1)。

图1

图2
因此,每个顶点的边长由产生随机数的算术平方根决定。
附代码如下:
# -*- coding:utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
if __name__=='__main__':
samples_num = 800
t = np.random.random(size=samples_num) * 2 * np.pi - np.pi
x = np.cos(t)
y = np.sin(t)
i_set = np.arange(0,samples_num,1)
for i in i_set:
len = np.sqrt(np.random.random())
x[i] = x[i] * len
y[i] = y[i] * len
plt.figure(figsize=(10,10.1),dpi=125)
plt.plot(x,y,'ro')
_t = np.arange(0,7,0.1)
_x = np.cos(_t)
_y = np.sin(_t)
plt.plot(_x,_y,'g-')
plt.xlim(-1.1,1.1)
plt.ylim(-1.1,1.1)
plt.xlabel('x')
plt.ylabel('y')
plt.title('Random Scatter')
plt.grid(True)
plt.savefig('imag.png')
plt.show()

图3
总结
以上就是本文关于Python随机生成均匀分布在单位圆内的点代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:python实现图片处理和特征提取详解、python中实现k-means聚类算法详解、Python内存管理方式和垃圾回收算法解析等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









