Was ist der Unterschied zwischen den folgenden?
%Vor% Abgesehen von der Tatsache, dass flat
einen Iterator anstelle einer Liste zurückgibt, scheinen sie identisch zu sein, da beide das ursprüngliche Array an Ort und Stelle verändern (im Gegensatz zu flatten()
, das eine Kopie von das Array). Gibt es also einen anderen signifikanten Unterschied zwischen flat
und ravel()
? Wenn nicht, wann wäre es sinnvoll, einen anstelle des anderen zu verwenden?
flat
ist ein Iterator. Es ist ein separates Objekt, das zufällig über Indexierung auf die Array-Elemente zugreifen kann. Sein Hauptzweck ist es, in Schleifen und Verständnisausdrücken verwendet zu werden. Die Reihenfolge ist dieselbe wie die, die Sie normalerweise von ravel
erhalten würden.
Anders als das Ergebnis von ravel
ist flat
kein ndarray
, also kann es nicht viel mehr tun, als das Array zu indizieren und darüber zu iterieren. Beachten Sie, dass Sie list
aufrufen mussten, um den Inhalt des Iterators anzuzeigen. Zum Beispiel würde arr.flat.min()
mit einem AttributeError
fehlschlagen, während arr.ravel().min()
dasselbe Ergebnis wie arr.min()
ergeben würde.
Da numpy
so viele Operationen bereitstellt, die keine expliziten Schleifen schreiben müssen, werden ndarray.flat
und Iteratoren im Allgemeinen selten verwendet, im Vergleich zu ndarray.ravel()
.
Es gibt Situationen, in denen ein Iterator vorzuziehen ist. Wenn Ihr Array groß genug ist und Sie versuchen, alle Elemente eins nach dem anderen zu überprüfen, würde ein Iterator gut funktionieren. Dies ist insbesondere dann der Fall, wenn Sie ein Array mit Speicherkarten haben, das in Portionen geladen wird.