Was ist der Unterschied zwischen Ndarray und Array in Numpy?


Antworten:


220

numpy.arrayist nur eine praktische Funktion zum Erstellen eines ndarray; es ist keine Klasse selbst.

Sie können ein Array auch mit erstellen numpy.ndarray, dies ist jedoch nicht die empfohlene Methode. Aus der Dokumentation von numpy.ndarray:

Arrays sollten mit konstruiert sein array, zerosoder empty... Die Parameter , die hier angegeben beziehen sich auf eine Low-Level - Methode ( ndarray(...)) für ein Array der Instanziierung.

Der größte Teil der Implementierung befindet sich in C-Code, hier in Multiarray , aber Sie können sich hier die ndarray-Schnittstellen ansehen:

https://github.com/numpy/numpy/blob/master/numpy/core/numeric.py


1
Ich denke, array () ist in core / src / multiarray / methods.c in array_getarray () implementiert.
Flxb

6
Dies kann dich beißen, wenn du vergisst, dass dies np.arraykeine Klasse ist, wie ich es oft tue. x = np.array([1,2.1,3]) if isinstance(x,np.array): # will give you a TypeError
Steve L

4
Sie haben noch keine Ahnung, warum Sie die Verwendung von ndarray vermeiden sollten? Weil es niedrig ist?
GabrielChu

@flxb: Nein, array_getarrayist die Implementierung von numpy.ndarray.__array__. numpy.arraybeginnt _array_fromobjectzumindest in der aktuellen Implementierung bei.
Benutzer2357112 unterstützt Monica

2
Warum wird es nicht empfohlen?
NoName


31

Nur ein paar Zeilen Beispielcode, um den Unterschied zwischen numpy.array und numpy.ndarray zu zeigen

Aufwärmschritt: Erstellen Sie eine Liste

a = [1,2,3]

Überprüfen Sie den Typ

print(type(a))

Sie erhalten

<class 'list'>

Erstellen Sie mit np.array ein Array (aus einer Liste)

a = np.array(a)

Oder Sie können den Aufwärmschritt direkt überspringen

a = np.array([1,2,3])

Überprüfen Sie den Typ

print(type(a))

Sie erhalten

<class 'numpy.ndarray'>

Dies sagt Ihnen, dass der Typ des numpy-Arrays numpy.ndarray ist

Sie können den Typ auch anhand überprüfen

isinstance(a, (np.ndarray))

und du wirst bekommen

True

In einer der beiden folgenden Zeilen wird eine Fehlermeldung angezeigt

np.ndarray(a)                # should be np.array(a)
isinstance(a, (np.array))    # should be isinstance(a, (np.ndarray))

4

numpy.ndarray()ist eine Klasse, während numpy.array()eine Methode / Funktion zu erstellen ist ndarray.

Wenn Sie in numpy docs ein Array aus einer ndarrayKlasse erstellen möchten, können Sie dies auf zwei Arten tun, wie angegeben:

Unter Verwendung von 1- array(), zeros()oder empty()Methoden: Arrays konstruiert werden soll Array, Nullen oder leer ist (siehe Abschnitt Siehe auch weiter unten). Die hier angegebenen Parameter beziehen sich auf eine Low-Level-Methode ( ndarray(…)) zum Instanziieren eines Arrays.

2- ndarraydirekt aus der Klasse: Es gibt zwei Modi zum Erstellen eines Arrays mit__new__ : Wenn der Puffer Keine ist, werden nur Form, Typ und Reihenfolge verwendet. Wenn buffer ein Objekt ist, das die Pufferschnittstelle verfügbar macht, werden alle Schlüsselwörter interpretiert.

Das folgende Beispiel gibt ein zufälliges Array an, 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]])         #random

Ein weiteres Beispiel ist das Zuweisen eines Array-Objekts zum Pufferbeispiel:

>>> np.ndarray((2,), buffer=np.array([1,2,3]),
...            offset=np.int_().itemsize,
...            dtype=int) # offset = 1*itemsize, i.e. skip first element
array([2, 3])

Aus dem obigen Beispiel geht hervor, dass wir "buffer" keine Liste zuweisen können und dass wir numpy.array () verwenden mussten, um das ndarray-Objekt für den Puffer zurückzugeben

Fazit: verwenden, numpy.array()wenn Sie ein numpy.ndarray()Objekt erstellen möchten "


0

Ich denke mit np.array()dir kann man nur C erstellen, als ob man die Reihenfolge erwähnt, wenn man prüft, ob np.isfortran()es falsch ist. aber mit , np.ndarrray()wenn Sie die Reihenfolge angeben , auf der angegebenen Reihenfolge erstellt basiert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.