2016-06-30 7 views
3
num_draws = int(1e6) 
arr1 = np.random.randint(0, 10, num_draws) 
arr2 = np.floor(10*np.random.rand(num_draws)) 

Может ли кто-нибудь с экспертными знаниями в отношении numpy.random комментировать, является ли arr2 формально эквивалентной статистикой arr1? В экспериментах, которые я сделал, распределения, похоже, имеют одни и те же первые несколько моментов, но это все, что я проверил до сих пор.Разница между numpy randint и floor of rand

ответ

1

Да, они эквивалентны[1]

Глядя на исходный код, они оба определены в вспомогательных функций (1, 2), что ссылки на основополагающие вызовы C на основе размера данных (1, 2) - оба звонят в the same underlying function.

Эта базовая функция - 32-разрядная Mersenne Twister. Все, что находится поверх этого вызова, - это сдвиги и маскировка, чтобы принудить правильный тип данных, но он не меняет базового поведения случайности.


Сноски

[1] Я предполагаю, что вы не спрашивая, есть ли ваш метод пола число неожиданных статистических побочных эффектов. Это не зависит от numpy, но поскольку оба они используют одно и то же равномерное статистическое устройство, они должны иметь одинаковую предвзятость. Я бы не ожидал, что они будут иметь такую ​​же производительность

+0

благодарит за разъяснения. Эффект «10%» при использовании rand вместо randint в порядке у меня - есть определенные ситуации, когда 'arr2' более естественно вписывается в проблему, чем' arr1'. – aph