Numpy.dot Fehler? Inkonsistentes NaN-Verhalten

9

Ich bemerkte ein inkonsistentes Verhalten in numpy.dot , wenn nan s und Nullen beteiligt sind.

Kann irgendjemand es verstehen? Ist das ein Fehler? Ist das spezifisch für die Funktion dot ?

Ich benutze numpy v1.6.1, 64bit, läuft auf Linux (auch getestet auf v1.6.2). Ich habe auch auf v1.8.0 auf Windows 32bit getestet (so kann ich nicht sagen, ob die Unterschiede auf die Version oder Betriebssystem oder Arch beruhen).

%Vor%

Fall # 4 scheint in v1.6.2 und v1.8.0 korrekt zu funktionieren, aber nicht in Fall # 2 ...

BEARBEITEN: @seberg hat darauf hingewiesen, dass dies ein großes Problem ist, also hier ist die Information über die blas Installation, die ich gefunden habe, indem ich from numpy.distutils.system_info import get_info; get_info('blas_opt') :

ausgeführt habe %Vor%

(Ich persönlich weiß nicht, was ich davon halten soll)

    
shx2 29.04.2014, 20:21
quelle

1 Antwort

3

Ich denke, wie von Seberg vorgeschlagen, ist dies ein Problem mit der verwendeten BLAS-Bibliothek. Wenn Sie schauen, wie numpy.dot implementiert wird hier und hier Sie einen Anruf finden cblas_dgemm () für der Doppelpräzisions-Matrix-Zeit-Matrix-Fall.

Das C-Programm, das einige Ihrer Beispiele wiedergibt, gibt die gleiche Ausgabe, wenn „plain“ BLAS verwendet wird, und die richtige Antwort bei der Verwendung von ATLAS.

%Vor%

Ausgabe mit BLAS:

%Vor%

Ausgabe mit ATLAS:

%Vor%

BLAS scheint erwartetes Verhalten zu haben, wenn der erste Operand eine NaN hat, und das Unrecht, wenn der erste Operand null ist und der zweite hat eine NaN.

Jedenfalls glaube ich nicht, dass dieser Bug in der Numpy-Ebene ist; Es ist in BLAS. Es scheint möglich zu sein, Problemumgehung zu umgehen, indem Sie stattdessen ATLAS verwenden.

Vor erzeugt auf Ubuntu 14.04, mit Ubuntu-bereitgestellt gcc, BLAS und ATLAS.

    
Rory Yorke 03.05.2014, 12:43
quelle

Tags und Links