2017-02-06 26 views
4

Ich versuche, den Erwartungsmaximierungsalgorithmus für Gaussian Mixture Model in Python zu implementieren.numpy: für Schleife durch Broadcasting loszuwerden

habe ich folgende Zeile die Gaußsche Wahrscheinlichkeit p meiner Daten X angesichts der mittleren mu und Kovarianz Sigma der Gaußschen Verteilung zu berechnen:

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

ich wissen wollte, ob Ich könnte irgendwie die For-Schleife loswerden, um so etwas wie

p[:] = scipy.stats.multivariate_normal.pdf(X[:,:]??) 
zu bekommenIch habe etwas über Broadcasting geforscht und dachte über die Verwendung der numpy.einsum Funktion nach, kann aber nicht herausfinden, wie es in diesem Fall funktionieren würde.

+0

Hat die gepostete Lösung für Sie arbeiten? – Divakar

+0

Ja, hat es getan! Danke vielmals – marilou

Antwort

0

Flatten, verwenden Sie den pdf Anruf und umformen zurück -

from scipy import stats 

out = stats.multivariate_normal.pdf(X.ravel(),mu,sigma).reshape(-1,len(X[0])).T