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