4

我想从 ∥<strong>x∥ ≤ 1 的均匀分布中采样一个二维向量x。我知道我可以从均匀分布中采样为

numpy.random.uniform(0.0, 1.0, 2)

但是我怎样才能确保 ∥<strong>x∥ ≤ 1?

4

2 回答 2

13

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

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)

编辑:关于原始答案的iguarna评论是正确的。为了均匀地绘制一个点,length需要是绘制的随机数的平方根。可以在此处找到对它的参考:Simulate a uniform distribution on a disc。举例来说,这是没有平方根的随机结果的结果: 没有平方根 和平方根: 有平方根

于 2017-10-29T04:39:10.743 回答
1

像上面那样对角度和长度进行采样并不能保证从圆中均匀采样。在这种情况下,P( a ) > P( b ) 如果||a|| > ||b|| . 为了从一个圆圈中均匀采样,请执行以下操作:

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

x = np.sqrt(length) * np.cos(angle)
y = np.sqrt(length) * np.sin(angle)
于 2018-05-02T12:48:02.403 回答