在单位圆内均匀采样

use*_*005 3 python uniform-distribution

我要取样的二维矢量X从均匀分布与∥ X ∥≤1.我知道可以从均匀分布作为采样

numpy.random.uniform(0.0, 1.0, 2)
Run Code Online (Sandbox Code Playgroud)

但我怎么能确保∥ X ∥≤1?

Eli*_*sha 6

它可以通过随机化角度和长度并将它们转换为笛卡尔坐标来完成:

import numpy as np

length = np.sqrt(np.random.uniform(0, 1))
angle = np.pi * np.random.uniform(0, 2)

x = length * np.cos(angle)
y = length * np.sin(angle)
Run Code Online (Sandbox Code Playgroud)

编辑:iguarna对原始答案的评论是正确的.为了均匀地绘制点,length需要是绘制的随机数的平方根.可以在此处找到对它的引用:模拟光盘上的均匀分布.举例来说,这是没有平方根的随机结果的结果: 没有平方根 并使用平方根: 用平方根