numpy Unterschied zwischen Flat und Ravel ()

8

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?

    
b_pcakes 13.07.2016, 17:07
quelle

1 Antwort

8

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.

    
Mad Physicist 13.07.2016, 17:15
quelle

Tags und Links