NumPy: избавиться от цикла за счет трансляции

Я пытаюсь реализовать алгоритм максимизации ожидания для гауссовой модели смеси в Python.

У меня есть следующая строка для вычисления гауссовской вероятности p моих данных X с учетом среднего значения mu и ковариационной сигмы гауссовского распределения:

for i in range(len(X[0])):  
   p[i] = scipy.stats.multivariate_normal.pdf(X[:,i],mu,sigma)

Я хотел знать, смогу ли я как-то избавиться от цикла for, чтобы получить что-то вроде

p[:] = scipy.stats.multivariate_normal.pdf(X[:,:]??)

Я провел некоторое исследование по вещанию и думал об использовании numpy.einsum функционировать, но не могу понять, как это будет работать в этом случае.

1 ответ

Решение

Сгладьте, используйте pdf позвонить и изменить форму обратно -

from scipy import stats

out = stats.multivariate_normal.pdf(X.ravel(),mu,sigma).reshape(-1,len(X[0])).T
Другие вопросы по тегам