> Ich benutze übrigens Python, weil ich damit meine numerischen Berechnungsprobleme zwischen 50 und 2000 mal schneller löse, als mit C.
Poste mal den Code dann werden wir sehen wo dein Fehler ist Exakt aus diesem Grund habe ich nur öffentlich anekannte Benchmarks zitiert und nicht persönliche Meinungen.
nur damit wir uns richtig verstehen: Mir ist es relativ schnuppe, wie schnell der Code auf der CPU ausgeführt wird. Der Flaschenhals ist das Programmieren selbst. Beispiel: Eine nicht-lineare "Least-Squares Minimization" mit anschließendem Kurven-Fitting ist mit wenigen Zeilen Python-Code erledigt. Wenn das Fitting eines Datensatzes dann statt 0.001 Sekunden (mit C) 0.2 Sekunden (mit Python) dauert - who cares. Rechenzeit ist im Vergleich zu Progammierzeit viel billiger. (Ja, ich weiss: Für Number-Crunching und Big Data gilt das nicht.)
So sieht es nämlich aus. Was auch okay ist. Es hätte sich keiner beschwert, wenn du es gleich so geschrieben hättest.
Man muss dazu sagen, ein Kurvenfit ein schlechtes Beispiel ist da es so gut wie in jeder Sprache implementiert und mit wenigen Zeilen erledigt ist. Nicht nur in Python. Das liegt aber eher daran, es konvexe Optimierung ist und einen einfachen Sonderfall darstellt. Es verwendet dennoch Matrizenmultiplikationen und ist per Definition O(n^3). Selbst mit Sparse Matrizen O(nnz) . Das heißt deine Aussage ist nur für einen kleinen Datensatz gültig. Bei größeren Datensätzen ist LSQ ohnehin nicht brauchbar.
ja, das ist richtig. Bei großen Datensätzen und nicht-linearen numerischen Problemen spielen Code-Optimierung eine große Rolle. Man braucht nur mal den Unterschied von numpy und numpy-mkl (mit Intel Math Kernel Library) ausprobieren. Rechenintensive Anwendungen (z.B. Finite-Elemente-Methode) nutzen neben C übrigens auch die Fortran NAG Library. Niemand käme auf die Idee, den Rechenkern eines FEM-Programms in Python oder Java zu programmieren. Gleichwohl habe alle professionellen FEM-Programme eine Python-Schnittstelle. Eben aus dem Grund: Der User ist i.d.R. kein Software-Programmierer und benötigt eine einfache Möglichkeit, mal schnell in ein Post Processing oder eine automatische Parameter-Variation für hunderte von FE-Rechnungen durchzuführen. Ein paar Zeilen Python-Code erledigen das. Vielleicht kann das in C viel besser erledigt werden, nützt aber nichts, wenn der User kein C kann. Ein Ingenieur kann vielleicht nicht C-Programmieren, er weiss aber was "viel" bedeutet
> Ich benutze übrigens Python, weil ich damit meine numerischen Berechnungsprobleme zwischen 50 und 2000 mal schneller löse, als mit C.
Poste mal den Code dann werden wir sehen wo dein Fehler ist Exakt aus diesem Grund habe ich nur öffentlich anekannte Benchmarks zitiert und nicht persönliche Meinungen.
nur damit wir uns richtig verstehen: Mir ist es relativ schnuppe, wie schnell der Code auf der CPU ausgeführt wird. Der Flaschenhals ist das Programmieren selbst. Beispiel: Eine nicht-lineare "Least-Squares Minimization" mit anschließendem Kurven-Fitting ist mit wenigen Zeilen Python-Code erledigt. Wenn das Fitting eines Datensatzes dann statt 0.001 Sekunden (mit C) 0.2 Sekunden (mit Python) dauert - who cares. Rechenzeit ist im Vergleich zu Progammierzeit viel billiger. (Ja, ich weiss: Für Number-Crunching und Big Data gilt das nicht.)
> Mir ist es relativ schnuppe
So sieht es nämlich aus. Was auch okay ist. Es hätte sich keiner beschwert, wenn du es gleich so geschrieben hättest.
Man muss dazu sagen, ein Kurvenfit ein schlechtes Beispiel ist da es so gut wie in jeder Sprache implementiert und mit wenigen Zeilen erledigt ist. Nicht nur in Python. Das liegt aber eher daran, es konvexe Optimierung ist und einen einfachen Sonderfall darstellt. Es verwendet dennoch Matrizenmultiplikationen und ist per Definition O(n^3). Selbst mit Sparse Matrizen O(nnz) . Das heißt deine Aussage ist nur für einen kleinen Datensatz gültig. Bei größeren Datensätzen ist LSQ ohnehin nicht brauchbar.
ja, das ist richtig. Bei großen Datensätzen und nicht-linearen numerischen Problemen spielen Code-Optimierung eine große Rolle. Man braucht nur mal den Unterschied von numpy und numpy-mkl (mit Intel Math Kernel Library) ausprobieren.
Rechenintensive Anwendungen (z.B. Finite-Elemente-Methode) nutzen neben C übrigens auch die Fortran NAG Library. Niemand käme auf die Idee, den Rechenkern eines FEM-Programms in Python oder Java zu programmieren. Gleichwohl habe alle professionellen FEM-Programme eine Python-Schnittstelle. Eben aus dem Grund: Der User ist i.d.R. kein Software-Programmierer und benötigt eine einfache Möglichkeit, mal schnell in ein Post Processing oder eine automatische Parameter-Variation für hunderte von FE-Rechnungen durchzuführen. Ein paar Zeilen Python-Code erledigen das. Vielleicht kann das in C viel besser erledigt werden, nützt aber nichts, wenn der User kein C kann.
Ein Ingenieur kann vielleicht nicht C-Programmieren, er weiss aber was "viel" bedeutet