熱線電話:13121318867

登錄
首頁精彩閱讀Python隨機生成均勻分布在單位圓內的點代碼示例
Python隨機生成均勻分布在單位圓內的點代碼示例
2018-01-22
收藏

Python隨機生成均勻分布在單位圓內的點代碼示例

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

因此我們對于每個頂點的邊長便是產生隨機數的算術平方根的大小

附代碼如下:

# -*- 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隨機生成均勻分布在單位圓內的點代碼示例的全部內容,希望對大家有所幫助。



數據分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數據分析師資訊
更多

OK
客服在線
立即咨詢
日韩人妻系列无码专区视频,先锋高清无码,无码免费视欧非,国精产品一区一区三区无码
客服在線
立即咨詢