在单位圆内均匀采样

时间:2017-10-29 04:32:22

标签: python uniform-distribution

我想从均匀分布中对二维向量 x 进行采样,其中strong x ∥≤1。我知道我可以从均匀分布中采样

while temperature():
    temperature()

但我怎样才能确保∥ x ∥≤1?

2 个答案:

答案 0 :(得分:5)

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

dframe = pd.DataFrame({
    'Date': ['2017-08-01', '2016-08-01', '2017-08-02'],
    'Data_Value': [2,3,4]
})

dframe.groupby(pd.to_datetime(dframe['Date']).dt.strftime('%m-%d'))['Data_Value'].min()

#Date
#08-01    2
#08-02    4
#Name: Data_Value, dtype: int64

修改iguarna对原始答案的评论是正确的。为了统一绘制点,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) 需要是绘制的随机数的平方根。 可以在此处找到对它的引用:Simulate a uniform distribution on a disc。 举例来说,这是没有平方根的随机结果的结果: Without square root 并使用平方根: With square root

答案 1 :(得分:1)

像上面那样对角度和长度进行采样并不能保证从圆圈中均匀采样。在这种情况下,P( a )>如果 || a || > P( b )的 || 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)