python fonction intégrée pour faire de la matrice de réduction
Python ont une fonction intégrée qui convertit une matrice en ligne échelon formulaire (aussi connu comme triangulaire supérieure)?
OriginalL'auteur user968102 | 2011-10-05
Vous devez vous connecter pour publier un commentaire.
Si vous pouvez utiliser
sympy
,de la Matrice.rref()
peut le faire:La matrice 4x4 est votre matrice en RRE (attention à la précision en virgule flottante), et le 1x4 matrice répertorie les indices de votre pivot de vars.
par contre, ~5 à 10 minutes. Par sympy, 1.13 ms :-3
Merci pour la réponse utile. Il n'est pas si simple de se reconvertir à un tableau numpy, cependant. J'ai utilisé
np.array(sympy.lambdify((),result[0])())
. Peut-être il ya une meilleure façon?Jamais l'esprit,
np.array(result[0].tolist(), dtype=float)
est plus simple.OriginalL'auteur
Oui. Dans
scipy.linalg
,lu
ne décomposition LU qui sera essentiellement vous obtenir de la ligne de l'échelon forme.Il y a d'autres factorisations comme
qr
,rq
,svd
, et de plus, si vous êtes intéressé.De la Documentation.
Oui, il est possible de calculer la réduction de la ligne de l'échelon à partir de ces fonctions, mais pourquoi faire de l'utilisateur de sauter à travers les cerceaux. Plus sensible des applications telles que scilab, Matlab, Mathematica, etc, ont de ces. Au lieu de cela, Python utilise doit passer par l'algèbre symbolique de la bibliothèque.
OriginalL'auteur
Je suis d'accord avec @Mile commentaire @WinstonEwert répondre Il n'y a pas de raison un ordinateur n'a pas pu effectuer RREF avec précision donnée.
La réalisation de RREF ne devrait pas être très compliqué, et matlab réussi à avoir cette fonction, de sorte numpy devrait avoir trop.
J'ai fait un très simple et état de l'avant réalisation, de provoquer de très innefficient. Mais pour de simples matrices, ça fonctionne très bien:
Voici quelques tests simples
OriginalL'auteur
voir http://mail.scipy.org/pipermail/numpy-discussion/2008-November/038705.html
En gros: ne pas le faire.
La rref algorithme produit trop d'imprécision lors de la mise en œuvre sur un ordinateur. Si vous voulez résoudre le problème d'une autre façon, ou d'utiliser la symbolique comme @aix suggéré.
fraction.Fraction
, qui est déjà surchargé pour les opérations arithmétiques. Vous pouvez même vectoriser le constructeur avec numpy, c'est à direVecFraction = np.vectorize(fraction.Fraction)
etrational_array = VecFraction(numeric_array)
. Il n'y a pas de raison un ordinateur n'a pas pu effectuer exacte RREF.OriginalL'auteur