2017-03-01 4 views
0

Ich habe eine sehr lange numpy Array, aber lassen Sie uns sagen, dass es wie folgt aussieht:Benutzerdefinierte Funktion für numpy Außen

>>> arr1 = np.array([0.001, 0.02, 0.021]) 

Ich möchte zwei Elemente, die die Art und Weise den Zugriff auf alle auf der Array zu einem Zeitpunkt und Führen Sie eine Operation für sie aus. Zum Beispiel möchte ich dies tun:

np.cos(arr1[0])*np.cos(arr1[1]) 
np.cos(arr1[0])*np.cos(arr1[2]) 
np.cos(arr1[1])*np.cos(arr1[2]) 

Ich bin vertraut mit der Funktion „äußere“, und ich kann es für die Subtraktion verwenden:

>>> np.subtract.outer(arr1, arr1) 
array([[ 0. , -0.019, -0.02 ], 
     [ 0.019, 0. , -0.001], 
     [ 0.02 , 0.001, 0. ]]) 

Wie kann ich meine eigene Funktion fließen in Numpys Äußeres?

EDIT: basierend auf einer Frage in den Kommentaren, würde ich die Funktion gerne so etwas wie dies zurück:

ich das gleiche Muster möchte wie die von numpy des äußeren Funktion zurückgegeben wird.

array([[ np.cos(arr1[0])*np.cos(arr1[0]), np.cos(arr1[0])*np.cos(arr1[1]), np.cos(arr1[0])*np.cos(arr1[2]) ], 

[ np.cos(arr1[1])*np.cos(arr1[0]), np.cos(arr1[1])*np.cos(arr1[1]), np.cos(arr1[1])*np.cos(arr1[2]) ], 

[ np.cos(arr1[2])*np.cos(arr1[0]), np.cos(arr1[2])*np.cos(arr1[1]), np.cos(arr1[2])*np.cos(arr1[2]) ]]) 
+0

Gibt es ein Muster, wie Sie die Elementpaare auswählen? – Divakar

+0

Bitte beachten Sie die @Divakar bearbeiten, konnte ich meine Antwort nicht in die Kommentare passen! – StatsSorceress

Antwort

0

Verwenden numpy broadcasting mit ufuncs, wenn Sie mathematische Operationen tun, die Sie vektorisieren wollen.

arr1 = np.array([0.001, 0.02, 0.021]) 
cos_a = np.cos(arr1) 
out = cos_a * cos_a[:,None] #rows * cols 
0

Sie könnten nur np.multiply.outer auf den cosine berechneten Werte verwenden -

cos_a = np.cos(arr1) 
out = np.multiply.outer(cos_a, cos_a) # Or simply np.outer() 
Verwandte Themen