2016-02-10 4 views
10

Sagen wir, ich möchte eine Funktion, die eine Lambda-Funktion (Callable) als Parameter, wo die Lambda-Funktion nimmt einen Vektor als Eingabe (definiert als numpy Array oder numpy Matrix) und gibt eine neue Vektor. Wie deklariere ich die Typ-Signatur für Callable mit numpigen Typen?Wie benutze ich numpy in optionalen Typisierung

Mein erster Versuch sieht ungefähr so ​​aus:

def some_func(calc_new_vector: Callable[[np.array], np.array], ...other-params...) -> SomeType: 
    ...do stuff... 
    ...return... 

Dies ist jedoch zu einem Fehler führt, wenn der Interpreter ausgeführt wird:

TypeError: Callable[[arg, ...], result]: each arg must be a type. Got <built-in function array>. 

Antwort

8

Verwirrend np.array ist eine Funktion nützlich für die Erstellung numpige Arrays. Es ist nicht die tatsächliche type der Arrays erstellt.

Der Typ ist np.ndarray.

Ersetzen Sie also np.array durch np.ndarray. Das sollte das Problem beheben.

+0

Danke. Ich habe vor kurzem beschlossen, die eingebaute 'type (...)' -Funktion zu verwenden, um genau die Typen von Variablen zu drucken, über die ich Zweifel habe. Manchmal erfordert es ein bisschen detektivische Arbeit bei der Verwendung von Bibliotheken wie Matplotlib, aber zumindest es hat mir geholfen, Typen zu finden, so weit, dass ich sie in meine Funktionserklärungen setzen kann. – Michelrandahl