3

Я переводил код Matlab (написанный кем-то еще) в Python.Понимание numpy.random.lognormal

В одном из разделов кода Matlab, переменная X_new устанавливается на значение, проведенной от логарифмически нормального распределения следующим образом:

% log normal distribution 
X_new = exp(normrnd(log(X_old), sigma)); 

То есть, случайная величина взята из нормального распределения по центру на log(X_old) и X_new установлено на e, поднятое до этого значения.

Прямой перевод этого кода на Python выглядит следующим образом:

import numpy as np 


X_new = np.exp(np.random.normal(np.log(X_old), sigma)) 

numpy Но включает в себя распределение логнормальный, которые могут быть отобранной непосредственно.

Вопрос в том, соответствует ли строка кода эквивалентной строкам кода выше?

X_new = np.random.lognormal(np.log(X_old), sigma) 
+0

Вы имеете в виду: это логарифмически нормальное распределение, эквивалентное нормальному распределению, где каждый элемент использовался в e^x? –

+0

@ChuckLoganLim вы можете перефразировать это? не уверен, что вы подразумеваете под «был использован в e^x». – dbliss

+0

Err. У вас нормальное распределение, не так ли? Вы получаете все значения y в этом графе, используйте его в выражении e^y, тогда результирующее значение для всех y будет формировать ваш новый «дистрибутив». –

ответ

3

Я думаю, что мне придется ответить на мой собственный вопрос здесь.

Из документации np.random.lognormal мы имеем

переменная х имеет распределение логарифмически нормально, если журнал (х) распределена нормально.

Давайте думать о X_new из кода Matlab как частный случай случайной величины x. Вопрос в том, нормально ли распределяется здесь log(x)? Ну, всего лишь normrnd(log(X_old), sigma). Так что да.

Теперь перейдем к вызову np.random.lognormal во второй версии кода Python. X_new снова является частным случаем случайной величины, которую мы можем назвать x. Возможно, log(x)? Да, должно быть, иначе numpy не назовет эту функцию lognormal. Среднее значение основного нормального распределения равно log(X_old), что совпадает с средним значением нормального распределения в коде Matlab.

Следовательно, все реализации логарифмически нормального распределения в вопросе эквивалентны (игнорируя различия между уровнями реализации на самом низком уровне).