Was ist der Unterschied zwischen ndarray
und array
in NumPy? Wo ist ihre Implementierung im NumPy-Quellcode?
Antworten
Zu viele Anzeigen?numpy.array
ist nur eine Komfortfunktion zum Erstellen eines ndarray
; es ist keine Klasse an sich.
Sie können auch ein Array mit numpy.ndarray
erstellen, aber dies ist nicht der empfohlene Weg. Aus dem Dokumentationszeichenfolge von numpy.ndarray
:
Arrays sollten mit
array
,zeros
oderempty
erstellt werden... Die hier angegebenen Parameter beziehen sich auf eine Low-Level-Methode (ndarray(...)
) zur Instanziierung eines Arrays.
Der Großteil der Implementierung befindet sich im C-Code, hier in multiarray, aber Sie können sich die ndarray-Schnittstellen hier ansehen:
https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py
Nur ein paar Zeilen Beispielcode, um den Unterschied zwischen numpy.array und numpy.ndarray zu zeigen
Aufwärmschritt: Erstellen einer Liste
a = [1,2,3]
Überprüfen Sie den Typ
print(type(a))
Sie erhalten
Erstellen eines Arrays (aus einer Liste) mit np.array
a = np.array(a)
Oder, Sie können den Aufwärmeschritt überspringen und direkt haben
a = np.array([1,2,3])
Überprüfen Sie den Typ
print(type(a))
Sie erhalten
was Ihnen sagt, dass der Typ des numpy-Arrays numpy.ndarray ist
Sie können auch den Typ überprüfen, indem Sie
isinstance(a, (np.ndarray))
und Sie erhalten
True
Einer der folgenden beiden Zeilen wird Ihnen eine Fehlermeldung geben
np.ndarray(a) # sollte np.array(a) sein
isinstance(a, (np.array)) # sollte isinstance(a, (np.ndarray)) sein
numpy.ndarray()
ist eine Klasse, während numpy.array()
eine Methode / Funktion zum Erstellen von ndarray
ist.
In den numpy-Dokumenten können Sie auf zwei Arten ein Array aus der Klasse ndarray
erstellen, wie unten angegeben:
1- Verwendung der Methoden array()
, zeros()
oder empty()
: Arrays sollten mit array, zeros oder empty (siehe Abschnitt Siehe auch unten) erstellt werden. Die hier angegebenen Parameter beziehen sich auf eine Low-Level-Methode (ndarray(…)
) zum Instanziieren eines Arrays.
2- direkt aus der Klasse ndarray
: Es gibt zwei Modi zur Erstellung eines Arrays mit __new__
: Wenn der Puffer None ist, werden nur Shape, Dtype und Order verwendet. Wenn der Puffer ein Objekt ist, das die Pufferschnittstelle freigibt, werden alle Schlüsselwörter interpretiert.
Im folgenden Beispiel wird ein zufälliges Array erstellt, da wir keinen Pufferwert zugewiesen haben:
np.ndarray(shape=(2,2), dtype=float, order='F', buffer=None) array([[ -1.13698227e+002, 4.25087011e-303], [ 2.88528414e-306, 3.27025015e-309]]) #zufällig
Ein weiteres Beispiel ist die Zuweisung eines Array-Objekts an den Puffer Beispiel:
>>> np.ndarray((2,), buffer=np.array([1,2,3]), ... offset=np.int_().itemsize, ... dtype=int) # Offset = 1*Itemgröße, d.h. erstes Element überspringen array([2, 3])
Im obigen Beispiel sehen wir, dass wir einer Liste keinen "Puffer" zuweisen können und wir numpy.array() verwenden mussten, um ein ndarray-Objekt für den Puffer zurückzugeben
Fazit: Verwenden Sie numpy.array()
, wenn Sie ein numpy.ndarray()
Objekt erstellen wollen"