Ich konvertiere Matlab-Code in Python. Ich muss eine Matrixmanipulation durchführen. Meine Matrix (A) ist (gerade) eine 65x3-Matrix. Die Anzahl der Zeilen ist jedoch abhängig davon, in welchem Schritt ich mich im Programm befinde.Effiziente NDarray-Operationen
In Matlab, der Code arbeite ich an ist:
output = inv(A'*A) * A';
Der folgende Python-Code gibt die erwartete Ausgabe nur in Ordnung. Ich bin nur neugierig, ob es einen besseren (mehr Pythonic, schneller, etc) Weg gibt, dies zu tun? Ich versuche nur bei Python und Numpy zu bleiben.
output = np.dot(np.linalg.inv(np.dot(np.transpose(A), A)), np.transpose(A))
Dank an jeden, der bereit ist zu helfen.
Abgesehen von der Verwendung der Abkürzung 'A.T' für die Transponierung können Sie nicht viel besser machen. (Aber das ist wirklich nur Auge Zucker, wird keinen tatsächlichen Unterschied machen) – Julien
Es sieht aus wie Sie die psuedo-inverse der Matrix "A" berechnen. Wenn Ihre Anwendung nicht speziell die Pseudoinverse berechnen muss, wenn Sie die Berechnung der Umkehrung vermeiden können, tun Sie es nicht. Dieser Artikel von John D. Cook sollte einen Einblick geben: http://www.johndcook.com/blog/2010/01/19/dont-invert-that-matrix/. Wenn Sie versuchen, die Lösung der kleinsten Quadrate für ein überbestimmtes (oder unterbestimmtes) Gleichungssystem zu finden, verwenden Sie die ['numpy.linalg.lstsq'] (http://docs.scipy.org/doc/numpy/reference/ generierte/numpy.linalg.lstsq.html) Methode, um Ihre Lösung direkt zu berechnen. – rayryeng