Ich habe ein Stück Code, der die Helmholtz-Hodge-Zerlegung berechnet. Ich habe auf meinem Mac OS Yosemite ausgeführt und es funktionierte gut. Vor einem Monat wurde mein Mac jedoch ziemlich langsam (es war wirklich alt), und ich entschied mich für ein neues Notebook (Windows 8.1, Dell).Verwendung von Numpy in verschiedenen Plattformen
Nach der Installation aller Python-Bibliotheken und so weiter, habe ich meine Arbeit mit dem gleichen Code (versioniert in Git) fortgesetzt. Und dann war das Ergebnis ziemlich komisch, ganz anders als im alten Notebook.
Zum Beispiel, was ich tue, ist zu konstruieren a
und b
(wirklich lange Kalkül) auf Matrizen und dann rufe ich den Solver:
s = numpy.linalg.solve(a, b)
Dies wurde Rückkehr a
(falsch, und verschiedene des Ergebnisses erhalten in meinem Mac, was richtig war).
Dann habe ich versucht, zu verwenden:
s = scipy.linalg.solve(a, b)
Und das Programm beendet mit Code 0, aber in der Mitte. Dann habe ich nur einen einfachen Test von:
print 'here1'
s = scipy.linalg.solve(a, b)
print 'here2'
Und here2
nie gedruckt wird.
Ich habe versucht:
print 'here1'
x, info = numpy.linalg.cg(a, b)
print 'here2'
Und das gleiche passiert.
Ich habe auch versucht, die Lösung zu überprüfen, nachdem numpy.linalg.solve
mit:
print numpy.allclose(numpy.dot(a, s), b)
Und ich habe eine False
(?!).
Ich weiß nicht, was passiert, wie eine Lösung zu finden, ich weiß nur, dass der gleiche Code in meinem Mac läuft, aber es wäre sehr gut, wenn ich es in anderen Plattformen ausführen könnte. Jetzt stecke ich in diesem Problem (habe keinen Mac mehr) und keine Ahnung von der Ursache.
Die seltsamste Sache ist, dass ich keinen Fehler auf Laufzeitwarnung, keine Rückmeldung überhaupt erhalte.
Vielen Dank für jede Hilfe.
EDIT:
Numpy Anzug Testergebnisse:
Scipy Anzug Testergebnisse:
Haben Sie die Versionskonsistenz überprüft? Vielleicht hat sich etwas zwischen den Versionen auf Ihrem alten Mac und den (vermutlich) neueren Versionen auf dem neuen Computer geändert. – Ajean
Ja, @Ajean. Ich steckte auch einen USB-Stick in meinen Mac, um den alten Code zu holen und ihn auf Mac- und Windows-Systemen neu zu starten. Es hat funktioniert (Mac), aber das System ist zu langsam, also würde ich es gerne auch auf einem Windows laufen lassen. Dies scheint überhaupt keinen Sinn zu ergeben. – pceccon
Wenn "det (b) = 0", auch aufgrund von Präzisionsverlust, bedeutet dies, dass Ihr Problem nicht gut definiert ist. Der Kampf gegen schlecht konditionierte Matrixprobleme ist einfach nicht der richtige Weg. –