Muszę obliczyć macierz odwrotnie i używam solve
funkcji. Chociaż działa dobrze na małych matrycach, solve
zwykle działa bardzo wolno na dużych matrycach. Zastanawiałem się, czy jest jakaś inna funkcja lub kombinacja funkcji (poprzez SVD, QR, LU lub inne funkcje dekompozycji), które mogą dać mi szybsze wyniki.
r
matrix-decomposition
matrix-inverse
jitendra
źródło
źródło
solve
metoda zdecydowanie nie moja praca, ale chcę algorytm jest szybszy. Zastanawiam się więc, czy istnieje bardziej wydajna (w kontekście czasu) funkcja do obliczania odwrotności dla macierzy o tak dużych rozmiarach.solve
? Oczywiście, przy braku specjalnej struktury, nie można uniknąć teoretycznych granic złożoności ogólnej inwersji macierzy.Odpowiedzi:
Czy próbowałeś, co kardynał zasugerował, i zbadałeś alternatywne metody obliczania odwrotności? Rozważmy konkretny przykład:
Jest to przykład macierzy korelacji , dla której chcemy mieć odwrotność. Na moim laptopie (Core-i5 2,50 Ghz) zajmuje 8–9 sekund, zajmuje nieco ponad 4 sekundy i zajmuje 17–18 sekund (sugeruje się wielokrotne uruchomienie kodu, aby uzyskać stabilne wyniki).2000 × 2000
solve
chol2inv(chol())
qr.solve()
Zatem odwrotność poprzez rozkład Choleskiego jest około dwa razy szybsza niż
solve
. Oczywiście mogą istnieć jeszcze szybsze sposoby. Właśnie odkryłem niektóre z najbardziej oczywistych tutaj. I jak już wspomniano w komentarzach, jeśli matryca ma specjalną strukturę, to prawdopodobnie można ją wykorzystać dla większej prędkości.źródło
solve
:-)