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.