2015-04-22 2 views

ответ

2

Основное различие между ними указано в docs. Ссылки на Doc rand и Doc randn

Для numpy.rand, вы получите случайные значения, сгенерированные из равномерного распределения в 0 - 1

Но numpy.randn вы получите случайные значения, полученные от нормального распределения, со средним 0 и дисперсией 1.

Просто небольшой пример.

>>> import numpy as np 
>>> np.random.rand(10) 
array([ 0.63067838, 0.61371053, 0.62025104, 0.42751699, 0.22862483, 
     0.75287427, 0.90339087, 0.06643259, 0.17352284, 0.58213108]) 
>>> np.random.randn(10) 
array([ 0.19972981, -0.35193746, -0.62164336, 2.22596365, 0.88984545, 
     -0.28463902, 1.0, 1.76429108, -2.5511792 , 0.09671888]) 
>>> 

Как вы можете видеть, что rand дает мне значения в пределах 0-1,

тогда randn дает мне значения с mean == 0 и variance == 1

Чтобы объяснить далее, позвольте мне генерировать достаточно большой выборки:

>>> a = np.random.rand(100) 
>>> b = np.random.randn(100) 
>>> np.mean(a) 
0.50570149531258946 
>>> np.mean(b) 
-0.010864958465191673 
>>> 

вы можете увидеть, что среднее a близка к 0.50, который был создан с помощью rand. Среднее b с другой стороны близко к 0.0, который был создан с помощью randn

0

Вы можете также получить преобразование из рандов номера для randn чисел в Python с помощью применение процентной точечной функции (ppf) для нормального распределения с распределенными случайными величинами ~ N (0,1). Это хорошо известный метод проектирования любых равномерных случайных величин (0,1) на ppf для получения случайных величин для желаемого кумулятивного распределения.

В Python мы можем визуализировать этот процесс следующим образом:

from numpy.random import rand 
import matplotlib.pyplot as plt 
from scipy.stats import norm 

u = rand(100000) # uniformly distributed rvs 
z = norm.ppf(u) # ~ N(0,1) rvs 

plt.hist(z,bins=100) 
plt.show() 

enter image description here

Смежные вопросы