À gauche de la Matrice de la Division et de Numpy Résoudre
Je suis en train de convertir un code qui contient l' \ opérateur de Matlab (Octave) pour Python. Exemple de code
B = [2;4]
b = [4;4]
B \ b
Cela fonctionne et produit 1.2. En utilisant cette page web
http://mathesaurus.sourceforge.net/matlab-numpy.html
Que j'ai traduit comme:
import numpy as np
import numpy.linalg as lin
B = np.array([[2],[4]])
b = np.array([[4],[4]])
print lin.solve(B,b)
Cela m'a donné une erreur:
numpy.linalg.linalg.LinAlgError: Array must be square
Comment se Matlab \ œuvres avec une matrice non carrée de B?
Toutes les solutions pour cela?
OriginalL'auteur user423805 | 2011-08-23
Vous devez vous connecter pour publier un commentaire.
De MathWorks documentation pour la gauche de la matrice de la division:
L'équivalent dans numpy est np.linalg.lstsq:
OriginalL'auteur unutbu
Matlab va réellement faire un certain nombre d'opérations lors de l' \ opérateur est utilisé, en fonction de la forme des matrices concernées (voir ici pour plus de détails). En vous exemple, Matlab est de retour d'une méthode des moindres carrés de la solution, plutôt que de résoudre l'équation linéaire directement, comme ce serait le cas avec une matrice carrée. Pour obtenir le même comportement dans numpy, faites ceci:
qui devrait vous donner la même solution que Matlab.
OriginalL'auteur talonmies
Vous pouvez la gauche inverse:
Résultat:
En fait, il suffit de lancer le solveur d'une fois, sans faire l'inverse, comme ceci:
Résultat:
.... comme avant
Pourquoi? Parce que:
Nous avons:
Multiplier par
B.T
, nous donne:Maintenant,
B.T.dot(B)
est carré, plein rang, possède un inverse. Et donc on peut multiplier par l'inverse deB.T.dot(B)
, ou de l'utilisation d'un solveur, comme ci-dessus, pour obtenirc
.OriginalL'auteur Hugh Perkins