Ich versuche, A * A.T in Python mit SciPy's dgemm zu berechnen, aber einen segfault zu erhalten, wenn A eine große Zeilendimension (~ 50.000) hat und ich die Matrizen in F-Reihenfolge übergebe. Natürlich ist die resultierende Matrix sehr groß, aber sowohl sgemm als auch nach dgemm in C-Reihenfolge arbeiten,
%Vor%Hat jemand diesen Bug schon einmal erlebt oder hat er eine Ahnung, was ihn verursacht? Ich benutze Python 2.7.3, numpy 1.8.0 und scipy 0.13.2.
EDIT: FWIW, das ist die einzige Reihenfolge, die den Fehler erzeugt.
%Vor%Beide oben genannten sind erfolgreich.
BEARBEITEN: BLAS info
%Vor%Sie dürfen beim Aufruf von Fortran keine Alias-Argumente angeben. Ich bin mir nicht sicher, ob das dein Problem ist, aber es könnte sein.
Die ersten beiden BLAS-Aufrufe aliasieren die Argumente nicht, da vor dem Aufruf von fortran temporäre Arrays erstellt werden. Das heißt, wegen dtype Mismatch und C-ordnung, beziehungsweise.
Der dritte BLAS-Aufruf aliasiert die Argumente. Versuchen Sie es mit b = A.copy (). T stattdessen.