Python随机生成均匀分布在单位圆内的点
2016-11-17 00:42
621 查看
Python有一随机函数可以产生[0,1)区间内的随机数,但是如果我们想生成随机分布在单位圆上的,那么我们可以首先生成随机分布在单位圆边上的点,然后随机调整每个点距离原点的距离,但是我们发现这个距离不是均匀分布于[0,1]的,而是与扇形的面积相关的
我们使用另外的随机函数生成从[0,1)的随机数r,我们发现r<s0的概率为s0,显而易见,如果r为0,那么对应的距离应该为0,如果是1,对应的距离自然也应该是1,假设我们产生了m个随机数,那么小于s0的随机数应该为s0*m左右,而且这些应该对应于扇形面积的s0倍处即图2的小扇形区域,落在这一区域的点应该为s0*m,此时扇形边长为s0^0.5,因此s0对应的距离应该为s0^0.5,因此我们得到的映射函数为y=x^0.5(图1)
图 1
图 2
因此我们对于每个顶点的边长便是产生随机数的算术平方根的大小
附代码如下:
图 3
我们使用另外的随机函数生成从[0,1)的随机数r,我们发现r<s0的概率为s0,显而易见,如果r为0,那么对应的距离应该为0,如果是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随机生成均匀分布在三角形内(或者任意多边形内)的点
- 随机生成正太分布样本原理及python实现
- 生成特定分布随机数的方法:Python seed() 函数&numpy &scikit-learn随机数据生成
- 用python生成各种随机分布图
- python如何生成各种随机分布图
- 均匀分布生成标准正态分布 python
- 如何生成均匀分布随机整数
- 如何生成均匀分布随机整数
- MATLAB 2015b randi函数生成随机均匀分布信号的用法
- [转]如何快速生成100万不重复的8位均匀分布的随机编号?
- matlab中randi代替randint生成随机均匀分布信号的用法
- “利用值域为1到7整数的随机数发生器(均匀分布),生成均匀分布的1到10的整数。”
- MATLAB产生连续均匀分布的随机数组——unifrnd
- Python 随机生成中文验证码的实例代码
- Python 随机生成中文验证码
- 随机数生成(一):均匀分布
- Python 随机生成中文验证码
- python生成随机密码