Numerische Matrix aus der Differenz zweier Vektoren auffüllen

8

Ist es möglich, eine numpy Matrix aus einer Funktion zu konstruieren? In diesem Fall ist die Funktion speziell die absolute Differenz zweier Vektoren: S[i,j] = abs(A[i] - B[j]) . Ein minimales Arbeitsbeispiel, das reguläres Python verwendet:

%Vor%

Geben:

%Vor%

Es wäre schön, eine Konstruktion zu haben, die ungefähr so ​​aussieht:

%Vor%

wo ich eine Eingabefunktion mit seinen Argumenten übergeben kann und den Geschwindigkeitsvorteil von numpy beibehalten kann.

    
Hooked 14.03.2012, 15:05
quelle

2 Antworten

10

Ich empfehle, einen Blick in die Sendefunktionen von numpy zu werfen:

%Vor%

Ссылка

Dann könnten Sie einfach Ihre Funktion schreiben als:

%Vor%

Dies sollte auch erheblich schneller als Ihre Lösung für größere Arrays sein.

    
JoshAdel 14.03.2012, 15:19
quelle
13

Zusätzlich zu dem, was @JoshAdel vorgeschlagen hat, können Sie auch die Methode outer von irgendeinem numpy ufunc , um das Rundschreiben im Fall von zwei Feldern zu tun.

In diesem Fall wollen Sie nur np.subtract.outer(A, B) (oder vielmehr den absoluten Wert davon).

Obwohl für dieses Beispiel eine der beiden Versionen gut lesbar ist, ist die Übertragung in einigen Fällen nützlicher, während die Verwendung von ufunc-Methoden in anderen Fällen sauberer ist.

Wie auch immer, es ist nützlich, beide Tricks zu kennen.

z.

%Vor%

Grundsätzlich können Sie outer , accumulate , reduce und reduceat mit einer beliebigen Anzahl von ufunc wie subtract , multiply , divide oder sogar Dinge wie% co_de verwenden %, usw.

Beispiel: logical_and entspricht np.cumsum . Das bedeutet, dass Sie so etwas wie np.add.accumulate by cumdiv implementieren könnten, wenn Sie es sogar müssten.

    
Joe Kington 14.03.2012 15:43
quelle

Tags und Links