Was ist der Unterschied zwischen Numpy's array()
und asarray()
Funktionen? Wann sollten Sie das eine anstelle des anderen verwenden? Sie scheinen für alle Eingänge, die mir einfallen, eine identische Ausgabe zu erzeugen.
Da andere Fragen an diese weitergeleitet werden, die Fragen zu asanyarray
oder andere Routinen zur Array-Erstellung stellen , lohnt es sich wahrscheinlich, eine kurze Zusammenfassung der jeweiligen Aufgaben zu haben.
Die Unterschiede bestehen hauptsächlich darin, wann die Eingabe unverändert zurückgegeben werden soll, anstatt ein neues Array als Kopie zu erstellen.
array
bietet eine Vielzahl von Optionen (die meisten anderen Funktionen sind dünne Wrapper), einschließlich Flags, um zu bestimmen, wann kopiert werden soll. Eine vollständige Erklärung würde genauso lange dauern wie die Dokumente (siehe Array-Erstellung , aber hier kurz einige Beispiele:
Angenommen, a
ist ein ndarray
und m
ist ein matrix
, und beide haben ein dtype
von float32
:
np.array(a)
und np.array(m)
kopiert beide, da dies das Standardverhalten ist.np.array(a, copy=False)
und np.array(m, copy=False)
wird m
aber nicht kopieren a
, da m
ist kein ndarray
.np.array(a, copy=False, subok=True)
und np.array(m, copy=False, subok=True)
wird weder kopieren, weil a m
ist matrix
, was eine Unterklasse von ist ndarray
.np.array(a, dtype=int, copy=False, subok=True)
kopiert beide, da das dtype
nicht kompatibel ist.Die meisten anderen Funktionen sind dünne Wrapper um array
dieses Steuerelement, wenn kopiert wird:
asarray
: Die Eingabe wird nicht kopiert zurückgegeben, wenn sie kompatibel ist ndarray
( copy=False
).asanyarray
: Die Eingabe wird nicht kopiert zurückgegeben, wenn es sich um eine kompatible ndarray
oder Unterklasse wie matrix
( copy=False
, subok=True
) handelt.ascontiguousarray
: Die Eingabe wird nicht kopiert zurückgegeben, wenn sie ndarray
in zusammenhängender C-Reihenfolge kompatibel ist ( copy=False
, order='C')
.asfortranarray
: Die Eingabe wird nicht kopiert zurückgegeben, wenn sie ndarray
in zusammenhängender Fortran-Reihenfolge kompatibel ist ( copy=False
, order='F'
).require
: Die Eingabe wird nicht kopiert zurückgegeben, wenn sie mit der angegebenen Anforderungszeichenfolge kompatibel ist.copy
: Die Eingabe wird immer kopiert.fromiter
: Die Eingabe wird als iterierbar behandelt (Sie können also beispielsweise ein Array aus den Elementen eines Iterators anstelle eines object
Arrays mit dem Iterator erstellen). immer kopiert.Es gibt auch Komfortfunktionen wie asarray_chkfinite
(dieselben Kopierregeln wie asarray
, aber erhöht, ValueError
wenn es irgendwelche nan
oder inf
Werte gibt) und Konstruktoren für Unterklassen wie matrix
oder für Sonderfälle wie Datensatz-Arrays und natürlich den eigentlichen ndarray
Konstruktor (mit dem Sie ein Array direkt erstellen können aus Schritten über einen Puffer).
Die Definition von
asarray
ist:So ist es wie
array
, außer es hat weniger Optionen, undcopy=False
.array
hatcopy=True
standardmäßig.Der Hauptunterschied besteht darin, dass
array
(standardmäßig) eine Kopie des Objekts erstellt wird, diesasarray
jedoch nicht, sofern dies nicht erforderlich ist.quelle
array([1, 2, 3])
oderasarray([1, 2, 3])
?[1, 2, 3]
ist eine Python-Liste, daher muss eine Kopie der Daten erstellt werden, um die zu erstellenndarary
. Verwenden Sie alsonp.array
direkt, anstattnp.asarray
dencopy=False
Parameter an zu sendennp.array
. Dascopy=False
wird ignoriert, wenn eine Kopie wie in diesem Fall erstellt werden muss. Wenn Sie die beiden%timeit
in IPython verwenden, sehen Sie einen Unterschied für kleine Listen, aber es spielt kaum eine Rolle, welche Sie für große Listen verwenden.np.asanyarray
?asarray
immer ein zurückndarray
.asanyarray
gibt eine Unterklasse zurück,ndarray
wenn dies der Fall ist. Zum Beispielnp.matrix
ist an eine Unterklasse vonndarray
. Sonp.asanyarray(np.matrix(...))
liefert die gleiche Matrix, währendnp.asarray(np.matrix(...))
wandelt die Matrix einndarray
.Der Unterschied kann anhand dieses Beispiels demonstriert werden:
eine Matrix erzeugen
verwenden
numpy.array
zu ändernA
. Funktioniert nicht, weil Sie eine Kopie ändernverwenden
numpy.asarray
zu ändernA
. Es hat funktioniert, weil Sie sichA
selbst ändernHoffe das hilft!
quelle
Die Unterschiede werden in der Dokumentation von
array
und ganz deutlich erwähntasarray
. Die Unterschiede liegen in der Argumentliste und damit in der Aktion der Funktion in Abhängigkeit von diesen Parametern.Die Funktionsdefinitionen sind:
und
Die folgenden Argumente können weitergegeben werden
array
und nichtasarray
wie in der Dokumentation erwähnt:quelle
Hier ist ein einfaches Beispiel, das den Unterschied demonstrieren kann.
Der Hauptunterschied besteht darin, dass das Array eine Kopie der Originaldaten erstellt und mit einem anderen Objekt die Daten im Originalarray ändern können.
Der Inhalt in Array (a) bleibt unberührt, und dennoch können wir jede Operation an den Daten mit einem anderen Objekt ausführen, ohne den Inhalt im ursprünglichen Array zu ändern.
quelle
asarray(x)
ist wiearray(x, copy=False)
Verwenden
asarray(x)
Sie diese Option, wenn Sie sicherstellen möchten, dassx
es sich um ein Array handelt, bevor andere Vorgänge ausgeführt werden. Wennx
es sich bereits um ein Array handelt, wird keine Kopie erstellt. Dies würde keinen redundanten Leistungseinbruch verursachen.Hier ist ein Beispiel für eine Funktion, die sicherstellt, dass
x
sie zuerst in ein Array konvertiert wird.quelle