NumPy convolve

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Schirrmeister
User
Beiträge: 3
Registriert: Sonntag 12. November 2006, 14:48
Wohnort: Berlin

Hallo,

ich beschäftige mich seit ein paar Wochen mit Python und bin z.Zt. bei dem Modul NumPy (Numeric), allerdings verstehe ich die Funktion convolve nicht.
In Python in a nutshell steht leider keine richtige Erklärung, was die Funktion genau macht, und auch im Internet hab ich nichts gefunden, das sie mir sinnvoll erklären würde.

Was ich gefunden habe ist das hier:
http://www.biorecipes.com/DarwinHelp/convolve.html

Allerdings ist die Formel

r[k] = sum( v1 * v2[k+i-i], i=1..k-1 )

eher verwirrend, was soll das i-i bei der Indizierung von v2, das ergibt doch keinen Sinn. :?:

Wenn mir jemand die Formel in sinnvoller Form aufschreiben könnte, würde das schon helfen.
Und was bewirkt der Parameter mode?
Intelligenz ist etwas, von dem die meisten Menschen verschont blieben.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Hoi und willkommen im Forum,

Na ja, Dein Link sagt ja schon fast alles aus, oder? Aber "Python in a nutshell" ist nun wirklich kein Buch, daß sich detailliert mit numerischer Programmierung auseinandersetzt. Du hast aber recht: In dem von Dir gezeigten Link hat sich der Fehlerteufel eingeschlichen. Ich finde eine gute Erklärung zur numerischen Convolution ("Faltung") gibt Numerical Recipies in diesem Kapitel. Auch nicht zu verachten ist die numpy Seite, wenn es um best. Erklärungen geht. Am besten ist aber ist die Mailinglist (siehe hier), wenn es um Hilfestellungen geht). (Ich treibe mich da auch manchmal rum.)
Um den mathematischen Einstieg zu finden empfehle ich ganz gerne die entsprechenden Seiten von Mathworld.

Schließlich zu Deiner Frage, soweit sie durch die Links noch nicht beantwortet ist:

Code: Alles auswählen

>>> from numpy import *
>>> print convolve.__doc__
Returns the discrete, linear convolution of 1-D
    sequences a and v; mode can be 0 (valid), 1 (same), or 2 (full)
    to specify size of the resulting sequence.

>>> a = arange(10)
>>> b = arange(10)
>>> convolve(a,b,mode=0)
array([120])
>>> convolve(a,b,mode=1)
array([ 10,  20,  35,  56,  84, 120, 165, 200, 224, 236])
>>> convolve(a,b,mode=2)
array([  0,   0,   1,   4,  10,  20,  35,  56,  84, 120, 165, 200, 224,
       236, 235, 220, 190, 144,  81])
Aber auf eines möchte ich Dich noch hinweisen: Seit Anfang des Jahres machen wir einen Unterschied zwischen Numeric und numarray (die älteren, teils nicht mehr unterstützten Module) auf der einen Seite und numpy (die "Verschmelzung") auf der anderen Seite.

Gruß,
Christian
Schirrmeister
User
Beiträge: 3
Registriert: Sonntag 12. November 2006, 14:48
Wohnort: Berlin

Danke, aber ich fürchte dein Link ist mir schon zuviel und vor allem zu Mathelastig, mit den Formeln kann ich leider rein gar nichts anfangen.
Dasselbe gilt leider auch für den Link zu Mathworld :cry:
Auf der NumPy Seite steht genauso wenig wie im Nutshell Buch (und es hat sich auch ein kleiner Fehler eingeschlichen).

Mir waren die Ausgaben der Funktion völlig unklar, nicht die Anwendung der Funktion selbst.

Ich konnte es mir jetzt aber über eine Seite der UNI Bremen erklären:
Was ist Convolution (Faltung)?
Das größte Problem war einfach, dass mir nicht bewusst war, dass eines der Arrays umgedreht wird, deshalb kam mir die Ausgabe so merkwürdig vor.

Allerdings enthält das Beispiel unter meinem Link einen Fehler, der 3. Wert im Beispiel ist dort -3 statt 27.
Gibt es hier eigentlich mal ein Bespiel das keinen Fehler enthält...

Auf jeden Fall danke, ich weiß jetzt was ich wissen wollte.
Intelligenz ist etwas, von dem die meisten Menschen verschont blieben.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Schirrmeister hat geschrieben:Allerdings enthält das Beispiel unter meinem Link einen Fehler, der 3. Wert im Beispiel ist dort -3 statt 27.
Gibt es hier eigentlich mal ein Bespiel das keinen Fehler enthält...

Auf jeden Fall danke, ich weiß jetzt was ich wissen wollte.
Stimmt und gern geschehen.
Wenn Du wirklich in numpy einsteigen möchtest, möchte ich Dir noch folgende Seite ans Herz legen: http://www.scipy.org/Documentation

Gruß,
Christian
Antworten