Unerwartetes Verhalten in numpy beim Teilen von Arrays

8

In Numpy 1.8.2 (mit Python 2.7.6) scheint also ein Problem bei der Array-Aufteilung zu bestehen. Bei der In-Place-Division eines ausreichend großen Arrays (mindestens 8192 Elemente, mehr als eine Dimension, Datentyp ist irrelevant) mit einem Teil von sich selbst ist das Verhalten für verschiedene Notationen inkonsistent.

%Vor%

Die Ausgabe wird voraussichtlich 0 sein, da die zwei Unterteilungen konsistent sein sollten, aber es ist 1808. Ist das ein Fehler? Tritt es auch in anderen numpigen Versionen vor?

    
Dschoni 12.11.2015, 15:22
quelle

1 Antwort

7

Es ist nicht wirklich ein Fehler, wie es mit der Puffergröße zu tun ist, wie Sie in der Frage vorschlagen. Wenn Sie die Puffergröße vergrößern, wird das Problem (vorerst ...) beseitigt:

%Vor%

Und wie Sie im Kommentar sagen, ist die Inplace-Division arr /= arr[0] , wo das ursprünglich schief gelaufen ist. Nur die ersten 8192 Elemente von arr werden gepuffert mit arr[0] , was einfach eine Ansicht der ersten Zeile von arr ist.

Dies bedeutet, dass alle 5000 Werte in der ersten Zeile korrekt von einander geteilt werden, und die zweite Zeile wird auch bis Index 3192 korrekt sein. Als nächstes werden die restlichen 1808 Werte in den Puffer für die Inplace Division, aber die Die erste Zeile hat sich bereits geändert: arr[0] ist jetzt einfach eine Ansicht einer Reihe von Einsen, daher werden die Werte in den letzteren Spalten nur durch eins geteilt.

    
Alex Riley 12.11.2015, 15:59
quelle

Tags und Links