web-dev-qa-db-de.com

Was ist der Unterschied zwischen ndarray und array in numpy?

Was ist der Unterschied zwischen ndarray und array in Numpy? Und wo finde ich die Implementierungen im Numpy-Quellcode?

201
flxb

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

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

Arrays sollten mit array, zeros oder empty erstellt werden ... Die hier angegebenen Parameter beziehen sich auf eine Methode auf niedriger Ebene (ndarray(...)) zum Instanziieren eine Anordnung.

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

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

179
wim

numpy.array ist eine Funktion, die ein numpy.ndarray. Es gibt keinen Objekttyp numpy.array.

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

Aufwärmschritt: Liste erstellen

a = [1,2,3]

Überprüfen Sie den Typ

print(type(a))

Sie erhalten

<class 'list'>

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

a = np.array(a)

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

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

Überprüfen Sie den Typ

print(type(a))

Sie erhalten

<class 'numpy.ndarray'>

das sagt dir der Typ des Numpy-Arrays ist numpy.ndarray

Sie können den Typ auch mit ü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))
24
Ying

numpy.ndarray() ist eine Klasse, während numpy.array() eine Methode/Funktion zum Erstellen von ndarray ist.

Wenn Sie in Numpy Docs ein Array aus der Klasse ndarray erstellen möchten, haben Sie zwei Möglichkeiten:

1- Verwenden von array(), zeros() oder empty() -Methoden: Arrays sollten mit Array, Nullen oder leer erstellt werden (siehe Abschnitt Siehe auch unten) Die hier angegebenen Parameter beziehen sich auf eine einfache Methode (ndarray(…)) zum Instanziieren eines Arrays.

2- direkt aus der Klasse ndarray: Es gibt zwei Modi zum Erstellen eines Arrays mit __new__: Wenn buffer None ist, werden nur shape, dtype und order verwendet. Wenn buffer Ist ein Objekt, 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 anderes Beispiel ist das Zuweisen eines Array-Objekts zum Puffer-Beispiel:

>>> 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 numpy.array () verwenden mussten, um das ndarray-Objekt für den Puffer zurückzugeben

Schlussfolgerung: Verwenden Sie numpy.array(), wenn Sie ein numpy.ndarray() -Objekt erstellen möchten. "

3

Ich denke mit np.array() kann man nur C erstellen, obwohl man die Reihenfolge erwähnt, wenn man mit np.isfortran() prüft, dass es false sagt. aber mit np.ndarrray(), wenn Sie die Reihenfolge angeben, die basierend auf der angegebenen Reihenfolge erstellt wird.

0
Sujith Rao