Angenommen, die Faltung einer allgemeinen Anzahl von diskreten Wahrscheinlichkeitsdichtefunktionen muss berechnet werden. Für das Beispiel unten gibt es vier Verteilungen, die auf Werten 0,1,2 mit den angegebenen Wahrscheinlichkeiten nehmen:Schnellere Faltung von Wahrscheinlichkeitsdichtefunktionen in Python
import numpy as np
pdfs = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1],[0.3,0.7,0.0],[1.0,0.0,0.0]])
Die Faltung kann wie folgt gefunden werden:
pdf = pdfs[0]
for i in range(1,pdfs.shape[0]):
pdf = np.convolve(pdfs[i], pdf)
Die Wahrscheinlichkeiten des Sehens 0, 1, ..., 8 sind dann gegeben durch
array([ 0.09 , 0.327, 0.342, 0.182, 0.052, 0.007, 0. , 0. , 0. ])
Dieser Teil der Engpass in meinem Code ist, und es scheint, dass es verfügbar etwas sein muss, um diesen Vorgang vektorisieren. Hat jemand einen Vorschlag, es schneller zu machen?
Alternativ kann eine Lösung, wo Sie
pdf1 = np.array([[0.6,0.3,0.1],[0.5,0.4,0.1]])
pdf2 = np.array([[0.3,0.7,0.0],[1.0,0.0,0.0]])
convolve(pd1,pd2)
und erhalten die paarweise Faltungen
array([[ 0.18, 0.51, 0.24, 0.07, 0. ],
[ 0.5, 0.4, 0.1, 0. , 0. ]])
auch enorm helfen würde, nutzen könnten.
Gemäß den numpy-Dokumenten können die Argumente für "np.convolve" nur 1-dimensional sein. Ich denke, hier gibt es nicht viel zu vektorisieren. Aber vielleicht lohnt es sich, eine andere Faltung wie scipy's fft zu verwenden? http://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.fftconvolve.html – SmCaterpillar
@SmCaterpillar Ich spielte ein bisschen damit herum, aber mein Wissen über Windungen ist zu begrenzt, um zu verstehen, was dort vor sich geht. Die Version hier verstehe ich, aber ich habe keine Ahnung, wie man die Gewichte für die fft-Version angibt. – Forzaa
Was meinst du mit Gewicht? Ich habe beides versucht und beide Faltungen geben das gleiche Ergebnis für Ihre Frage. Allerdings war das FFT viel langsamer (aufgrund des Overheads ist Ihr Spielzeugproblem zu klein, vielleicht wenn die PDFs selbst mehr Werte enthalten, erhalten Sie tatsächlich eine Geschwindigkeitssteigerung). – SmCaterpillar