2016-02-10 25 views
10

Powiedzmy, że chcę utworzyć funkcję, która przyjmuje funkcję lambda (Callable) jako parametr, w którym funkcja lambda przyjmuje wektor jako dane wejściowe (zdefiniowane jako tablica numpy lub numpy matrix) i zwraca nową wartość wektor. Jak zadeklarować typ podpisu dla opcji Callable z typami numpy?Jak używać numpy w opcjonalnym typowaniu

Moja początkowa próba wygląda mniej więcej tak:

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

Jednak to powoduje wystąpienie błędu podczas uruchamiania interpretera:

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

Odpowiedz

8

Confusingly, np.array jest funkcja przydatna do tworzenia numpy tablice. To nie jest rzeczywisty type utworzonych tablic.

Typ to np.ndarray.

Wymień np.array na np.ndarray. To powinno naprawić problem.

+0

Dziękuję. Niedawno postanowiłem użyć wbudowanej funkcji 'type (...)', aby wydrukować dokładne typy zmiennych, których mam wątpliwości. Czasami wymaga to trochę pracy detektywistycznej przy korzystaniu z bibliotek takich jak matplotlib, ale przynajmniej Pomogło mi znaleźć typy do tej pory, więc mogę umieścić je w moich deklaracjach funkcji. – Michelrandahl