Hat jemand Typhinweise für die jeweilige numpy.ndarray
Klasse implementiert ?
Im Moment benutze ich typing.Any
, aber es wäre schön, etwas Spezifischeres zu haben.
Zum Beispiel , wenn die NumPy Menschen hinzugefügt einen Typen alias für ihre array_like Objektklasse. Besser noch, implementieren Sie die Unterstützung auf dtype- Ebene, damit andere Objekte sowie ufunc unterstützt werden .
argparse
Parser zu füllen . Für Py2 werden Dekoratoren verwendet, um eine ähnlicheannocation
Datenbank zu erstellen .typing
ist neu in Py 3.5. Vielenumpy
Benutzer arbeiten immer noch mit Py2. Ich habe 3.5 auf meinem System, aber ich habe nicht dafürnumpy
installiert.numpy
Entwickler werden keine Funktionen für die@
numpy
wird in einemgithub
Repository verwaltet. Schau dir dasissues
und anpull requests
; Melden Sie sich an und reichen Sie Ihre eigene Ausgabe ein. Es mag ein anderes Forum geben, um Entwicklungsprobleme zu diskutieren, aber die meisten betrachte ichgithub
.Antworten:
Es sieht so aus, als ob das
typing
Modul entwickelt wurde bei:https://github.com/python/typing
Das Haupt-
numpy
Repository befindet sich unterhttps://github.com/numpy/numpy
Python-Fehler und Commits können unter verfolgt werden
http://bugs.python.org/
Die übliche Methode zum Hinzufügen eines Features besteht darin, das Haupt-Repository zu teilen, das Feature so lange zu entwickeln, bis es bombensicher ist, und dann eine Pull-Anfrage zu senden. Natürlich möchten Sie an verschiedenen Stellen im Prozess Feedback von anderen Entwicklern. Wenn Sie die Entwicklung nicht selbst durchführen können, müssen Sie jemanden davon überzeugen, dass es sich um ein lohnendes Projekt handelt.
cython
hat eine Form von Anmerkungen, mit denen effizienterC
Code generiert wird .Sie haben
array-like
in dernumpy
Dokumentation auf den Absatz verwiesen . Beachten Sie dietyping
Informationen:Mit anderen Worten, die
numpy
Entwickler lehnen es ab, festgehalten zu werden. Sie beschreiben nicht oder nicht in Worten, in welche Arten von Objekten konvertiert werden kann oder nichtnp.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)
Für Ihre eigenen Funktionen eine Anmerkung wie
def foo(x: np.ndarray) -> np.ndarray:
funktioniert. Wenn Ihre Funktion am Ende eine
numpy
Funktion aufruft , die ihr Argument durchläuftasanyarray
(wie viele), wäre eine solche Anmerkung natürlich unvollständig, da Ihre Eingabe einlist
, odernp.matrix
usw. sein könnte.Achten Sie bei der Bewertung dieser Frage und Antwort auf das Datum. 484 war damals ein relativ neues PEP und Code, um es für Standard-Python zu verwenden, das sich noch in der Entwicklung befindet. Es sieht jedoch so aus, als ob die bereitgestellten Links noch gültig sind.
quelle
annotations
? Wie ich am besten weiß, erhält eine Funktion in Python 3 ein__annotations__
Wörterbuch, aber der Interpreter macht nichts damit.typing
Anmerkungen zu vorhandenennumpy
Funktionen (einschließlichnp.array
) hinzufügen oder nur Typen, die das Hinzufügen von Anmerkungen zu Ihren eigenen Funktionen erleichtern?def Vector(np_arr): return np_arr.ndim == 1 def Matrix(np_arr): return np_arr.ndim > 1
. Hoffe, es hilft jemandem.Schauen Sie sich DataShape an . Es verwendet die Datentypen sowie eine Syntax für die Größe der Eingabe- und Ausgabearrays.
quelle
Was ich getan habe war, es einfach als zu definieren
Wenn Sie beispielsweise eine Reihe von Floats möchten, können Sie Folgendes tun:
a = numpy.empty(shape=[2, 2], dtype=float) # type: Dict[Tuple[int, int], float]
Dies ist aus Dokumentationssicht natürlich nicht genau, aber für die Analyse der korrekten Verwendung und die ordnungsgemäße Vervollständigung mit pyCharm funktioniert es hervorragend!
quelle
np.ndarray
als TypIn meiner Firma haben wir verwendet:
from typing import TypeVar, Generic, Tuple, Union, Optional import numpy as np Shape = TypeVar("Shape") DType = TypeVar("DType") class Array(np.ndarray, Generic[Shape, DType]): """ Use this to type-annotate numpy arrays, e.g. def transform_image(image: Array['H,W,3', np.uint8], ...): ... """ pass def func(arr: Array['N,2', int]): return arr*2 print(func(arr = np.array([(1, 2), (3, 4)])))
Wir haben tatsächlich einen MyPy-Checker, der überprüft, ob die Formen funktionieren (die wir irgendwann freigeben sollten). Das einzige ist, dass es PyCharm nicht glücklich macht (dh Sie erhalten immer noch die bösen Warnzeilen):
quelle
nptyping bietet viel Flexibilität bei der Angabe von Numpy-Typ-Hinweisen.
quelle