Esta es la contestación más exacta que te podemos compartir, pero obsérvala pausadamente y analiza si es compatible a tu proyecto.
Solución:
Deberías echarle un vistazo a numpy si haces manipulación de matrices. Este es un módulo escrito principalmente en C, que será mucho más rápido que programar en Python puro. Aquí hay un ejemplo de cómo invertir una matriz y hacer otra manipulación de matrices.
from numpy import matrix
from numpy import linalg
A = matrix( [[1,2,3],[11,12,13],[21,22,23]]) # Creates a matrix.
x = matrix( [[1],[2],[3]] ) # Creates a matrix (like a column vector).
y = matrix( [[1,2,3]] ) # Creates a matrix (like a row vector).
print A.T # Transpose of A.
print A*x # Matrix multiplication of A and x.
print A.I # Inverse of A.
print linalg.solve(A, x) # Solve the linear equation system.
También puedes echar un vistazo a la array módulo, que es una implementación de listas mucho más eficiente cuando tiene que tratar con un solo tipo de datos.
Asegúrate de que realmente necesitas invertir la matriz. Esto es a menudo innecesario y puede ser numéricamente inestable. Cuando la mayoría de las personas preguntan cómo invertir una matriz, realmente quieren saber cómo resolver Ax = b donde A es una matriz y x y b son vectores. Es más eficiente y más preciso usar código que resuelva la ecuación Ax = b para x directamente que calcular A inversa y luego multiplicar la inversa por B. Incluso si necesita resolver Ax = b para muchos valores b, no es una buena idea para invertir A. Si tiene que resolver el sistema para múltiples valores de b, guarde la factorización de Cholesky de A, pero no la invierta.
Consulte No invertir esa matriz.
Es una pena que la matriz elegida, repetida aquí de nuevo, sea singular o esté mal condicionada:
A = matrix( [[1,2,3],[11,12,13],[21,22,23]])
Por definición, la inversa de A cuando se multiplica por la propia matriz A debe dar una matriz unitaria. La A elegida en la muy elogiada explicación no hace eso. De hecho, solo mirar el inverso da una pista de que la inversión no funcionó correctamente. Observe la magnitud de los términos individuales: son muy, muy grandes en comparación con los términos de la matriz A original…
¡Es notable que los humanos, cuando eligen un ejemplo de matriz, con tanta frecuencia logran elegir una matriz singular!
Tuve un problema con la solución, así que investigué más. En la plataforma ubuntu-kubuntu, el paquete debian numpy no tiene los subpaquetes matrix y linalg, por lo que además de importar numpy, también se debe importar scipy.
Si los términos de la diagonal de A se multiplican por un factor lo suficientemente grande, digamos 2, lo más probable es que la matriz deje de ser singular o casi singular. Asi que
A = matrix( [[2,2,3],[11,24,13],[21,22,46]])
no se vuelve ni singular ni casi singular y el ejemplo da resultados significativos… Cuando se trata de números flotantes, uno debe estar atento a los efectos de errores de redondeo inevitables.
Gracias por tu aporte,
AntiguoAl.
Aquí tienes las reseñas y valoraciones
Si te ha sido de utilidad este post, sería de mucha ayuda si lo compartieras con más programadores de esta forma nos ayudas a dar difusión a nuestra información.