Python实现单位圆内均匀分布随机点的算法与代码

Ryan
Ryan
发布时间:2026-10-13 | 3人浏览过
原创

本文介绍在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内存管理方式和垃圾回收算法解析等,有什么问题可以随时留言,小编会及时回复大家的。感谢朋友们对本站的支持!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表