20

Czy ktoś zaimplementował typ wskazówek dla konkretnej klasy numpy.ndarray?Typ wskazówka/adnotacja (PEP 484) dla numpy.ndarray

W tej chwili używam typing.Any, ale miło byłoby mieć coś bardziej konkretnego.

Na przykład, jeśli ludzie numpy dodali type alias dla swojej klasy obiektu array_like. Co więcej, zaimplementuj obsługę na poziomie dtype, aby inne obiekty były obsługiwane, a także ufunc.

+0

Nie przypominam sobie, aby widziałem jakiekolwiek użycie adnotacji typu Python3 w pytaniach lub odpowiedziach typu "numpy". – hpaulj

+1

https://pypi.python.org/pypi/plac może korzystać z adnotacji Py3 - do wypełniania parsera "argparse". W Py2 używa dekoratorów do stworzenia podobnej bazy danych "annocation". – hpaulj

+1

'wpisywanie' jest nowy w Py 3.5. Wielu użytkowników 'numpy' nadal pracuje z Py2. Mam 3,5 w moim systemie, ale nie mam zainstalowanego dla niego 'numpy'. Twórcy 'numpy' nie zamierzają dodawać funkcji dla nowatorskiego Pythona (z wyjątkiem operatora' @ ') – hpaulj

Odpowiedz

7

To wygląda moduł typing został opracowany pod adresem:

https://github.com/python/typing

Głównym numpy repozytorium jest w

https://github.com/numpy/numpy

Pythona błędów i zobowiązuje mogą być śledzone przy

http://bugs.python.org/

Zwykły sposób dodawania funkcji polega na rozwidleniu głównego repozytorium, rozwinięciu funkcji do momentu uzyskania odporności na bomby, a następnie przesłaniu żądania wyciągnięcia. Oczywiście w różnych punktach procesu chcesz uzyskać opinie od innych programistów. Jeśli nie możesz sam wykonać projektu, musisz przekonać kogoś, że jest to opłacalny projekt.

cython ma formę adnotacji, której używa do generowania wydajnego kodu C.


można odwoływać się array-like paragraf w numpy dokumentacji. Uwaga jego typing informacje:

Prostym sposobem, aby dowiedzieć się, czy obiekt może być przekształcony w numpy tablicy za pomocą array() jest po prostu spróbować interaktywnie i sprawdzić, czy to działa! (Droga Python).

Innymi słowy programiści numpy nie chcą zostać przypięci. Nie potrafią lub nie mogą opisać słowami, jakie rodzaje obiektów można lub nie można przekonwertować na np.ndarray.

In [586]: np.array({'test':1}) # a dictionary 
Out[586]: array({'test': 1}, dtype=object) 

In [587]: np.array(['one','two']) # a list 
Out[587]: 
array(['one', 'two'], 
     dtype='<U3') 

In [589]: np.array({'one','two'}) # a set 
Out[589]: array({'one', 'two'}, dtype=object) 

Dla własnych funkcji, adnotacja jak

def foo(x: np.ndarray) -> np.ndarray: 

prac. Oczywiście, jeśli twoja funkcja kończy się wywoływaniem funkcji numpy, która przekazuje swój argument za pomocą(jak wielu robi), taka adnotacja byłaby niepełna, ponieważ twoje dane wejściowe mogłyby być list lub np.matrix itd.

+0

Założona https://github.com/numpy/numpy/issues/7370 – Inon

+1

Jakie oprogramowanie, edytor lub tłumacz korzysta z "adnotacji"? Jak najlepiej wiem, w prostym Pythonie 3 funkcja otrzymuje słownik "__annotations__", ale tłumacz nie robi nic z nim. – hpaulj

+1

Czy chcesz dodać adnotacje typu "typing" do istniejących funkcji 'numpy' (w tym' np.array'), lub po prostu typy, które ułatwiłyby dodawanie adnotacji do własnych funkcji? – hpaulj

3

Zapoznaj się z DataShape. Używa on typów danych, a także pewnej składni, jak duże powinny być tablice wejściowe i wyjściowe.

+0

tak DataShape jest Numpy _ alternatywa_? Niezupełnie to, co miałem na myśli, ponieważ używam SciPy, która wyraźnie wymaga Numpy. – Inon

+0

DataShape to opis. Obecnie nie ma adnotacji z oficjalnymi funkcjami, ale jak dotąd jest to najlepszy opis, jaki widziałem dla typów Numpy, jeśli zamierzasz tworzyć adnotacje funkcyjne. I tak, sugerowałbym utworzenie nowej nazwy modułu i użycie go jako dowodu koncepcji przed wprowadzeniem adnotacji funkcji do źródła numpy. – Back2Basics

2

co zrobiłem było po prostu zdefiniować go jako

Dict [krotki [int, int] typ]

Tak na przykład, jeśli chcesz tablicę pływaków można zrobić:

a = numpy.empty(shape=[2, 2], dtype=float) # type: Dict[Tuple[int, int], float]

to nie jest oczywiście precyzyjne z punktu widzenia dokumentacji, ale do analizy prawidłowe użytkowanie i uzyskanie odpowiedniego comp letio z pyCharm działa świetnie!

Powiązane problemy