Eu preciso calcular a matriz inversa e tenho usado a solve
função. Embora funcione bem em matrizes pequenas, solve
tende a ser muito lento em matrizes grandes. Eu queria saber se existe alguma outra função ou combinação de funções (por meio de SVD, QR, LU ou outras funções de decomposição) que possa me fornecer resultados mais rápidos.
r
matrix-decomposition
matrix-inverse
jitendra
fonte
fonte
solve
método definitivamente faz o meu trabalho, mas quero que o algoritmo seja mais rápido. Então, estou me perguntando se existe uma função mais eficiente (no contexto do tempo) para calcular inverso para uma matriz de tamanho tão grande.solve
? Obviamente, na falta de estrutura especial, você não pode escapar dos limites da complexidade teórica na inversão geral da matriz.Respostas:
Você já experimentou o que o cardeal sugeriu e explorou alguns dos métodos alternativos para calcular o inverso? Vamos considerar um exemplo específico:
Então, este é um exemplo de um matriz de correlação para o qual queremos que o inverso. No meu laptop (Core-i5 2.50Ghz), leva de 8 a 9 segundos, demora um pouco mais de 4 segundos e leva de 17 a 18 segundos (várias execuções do código são sugeridas para obter resultados estáveis).2000 × 2000
solve
chol2inv(chol())
qr.solve()
Portanto, o inverso via decomposição de Choleski é duas vezes mais rápido que
solve
. É claro que pode haver maneiras ainda mais rápidas de fazer isso. Eu acabei de explorar alguns dos mais óbvios aqui. E, como já mencionado nos comentários, se a matriz tiver uma estrutura especial, isso provavelmente poderá ser explorado para obter mais velocidade.fonte
solve
:-)