2016-07-09 5 views
1

Для того, чтобы провести математическое моделирование для оценки ожидаемого расстояния между двумя случайными точками в $ n $ -мерном пространстве, я обнаружил, что следующие два похожих метода для генерации случайных точек кажутся разными. Я не могу понять, почему.Разница между двумя методами генерации случайных точек

Метод 1:

def expec_distance1(n, N = 10000): 
    u = uniform(0,1) 
    dist = 0 
    for i in range(N): 

     x = np.array([u.rvs() for i in range(n)]) 
     y = np.array([u.rvs() for i in range(n)]) 

     dist = (dist*i + euclidean_dist(x,y))/(i+1.0) 
    return dist 

Способ 2:

def expec_distance2(n, N = 10000): 

    u = uniform(0,1) 
    dist = 0 
    for i in range(N): 

     x = u.rvs(n) 
     y = u.rvs(n) 

     dist = (dist*i + euclidean_dist(x,y))/(i+1.0) 
    return dist 

, где равномерное распределение scipy.stats.uniform и np обозначает NumPy.

За 100 пробегов двух методов (при п = 2), с помощью метода 1, я получаю $ \ му = 0,53810011995126483, \ сигма = +0,13064091613389378 $ с методом 2, $ \ му = 0.52155615672453093, \ сигма = +0,0023768774304696902 $

Почему существует такая большая разница между std dev двух методов?

Вот код, чтобы попробовать: https://gist.github.com/swairshah/227f056e6acee07db6778c3ae746685b (я заменил SciPy с NumPy, причина его быстрее, но она имеет ту же разницу между стандом Dev)

+0

связанные комментарии от первого ответа здесь: http://stats.stackexchange.com/questions/52909/how-to-find-the-expected -Расстояние-между-два-равномерно распределенные точки? Rq = 1. Но причина, по которой они разные, не предоставляется – swair

+0

Можете ли вы опубликовать полный, исполняемый [SSCCE] (http://sscce.org/)? –

+1

@MikeGraham добавил в сообщение. – swair

ответ

2

В Python 2, списочное протекание их переменный контур ,

Поскольку вы цикл над i в список ваших постижений ([u.rvs() for i in range(n)]), то есть i используется в dist = (dist*i + euclidean_dist(x,y))/(i+1.0). (i всегда равно n-1, а не значение переменной основного контура.)

+2

hah! хороший улов. – swair

+1

Blech, я понял, что 12 минут слишком поздно. Глупый обзор Python. – Kodiologist

+1

Это исправлено в python 3, что отлично. –