Necesito calcular la matriz inversa y he estado usando la solve
función. Si bien funciona bien en matrices pequeñas, solve
tiende a ser muy lento en matrices grandes. Me preguntaba si hay alguna otra función o combinación de funciones (a través de SVD, QR, LU u otras funciones de descomposición) que puedan darme resultados más rápidos.
r
matrix-decomposition
matrix-inverse
jitendra
fuente
fuente
solve
método definitivamente hace mi trabajo, pero quiero que el algoritmo sea más rápido. Entonces, me pregunto si hay una función más eficiente (en contexto de tiempo) para calcular la inversa de una matriz de gran tamaño.solve
? Por supuesto, en ausencia de una estructura especial, no puede escapar de los límites de complejidad teórica en la inversión general de la matriz.Respuestas:
¿Has probado lo que cardinal sugirió y exploraste algunos de los métodos alternativos para calcular el inverso? Consideremos un ejemplo específico:
Entonces, este es un ejemplo de una matriz de correlación para la que queremos lo inverso. En mi computadora portátil (Core-i5 2.50Ghz), toma 8-9 segundos, toma un poco más de 4 segundos y toma 17-18 segundos (se sugieren múltiples ejecuciones del código para obtener resultados estables).2000 × 2000
solve
chol2inv(chol())
qr.solve()
Entonces, el inverso a través de la descomposición de Choleski es aproximadamente el doble de rápido que
solve
. Por supuesto, puede haber formas aún más rápidas de hacerlo. Acabo de explorar algunos de los más obvios aquí. Y como ya se mencionó en los comentarios, si la matriz tiene una estructura especial, entonces esto probablemente pueda explotarse para obtener más velocidad.fuente
solve
:-)