szukam szybkiego obliczenia w badania śladu (trace (A)) macierzy A = B”C. Najszybszy sposób mogę myśleć jest następujący:Śledzenie macierzy krzyżowej - szybsze obliczenia?
set.seed(123)
n <- 10^6
B <- matrix(rnorm(n), ncol=sqrt(n))
C <- matrix(rnorm(n), ncol=sqrt(n))
ptm <- proc.time()
A <- tcrossprod(B,C)
traceA <- sum(diag(A))
proc.time() - ptm
pytam siebie, jeśli istnieje szybszy sposób (zwłaszcza jeśli macierz B i macierz C są symetryczne, a nawet idempotentne). Chodzi mi o to, że z linią A <- tcrossprod(B,C)
obliczam całą macierz A, chociaż potrzebuję tylko sumy diagonalnych elementów macierzy (trace (A)).
Aby przyspieszyć, pomyślałem o obliczeniach równoległych dla tcrossprod
, ale nie znalazłem na to implementacji (nie wiem, czy to byłby dobry pomysł). Czy ktoś ma pomysł?
Okay dzięki! Zapomniałem wspomnieć, że w rzeczywistości mam rekursywne obliczenia dla macierzy A. Na przykład: A (k) = A (k-1) + crossprod (B, A (k-1)) '. I potrzebuję śladu 'A (k)' dla kroku 'k'. Więc jeśli użyję twojej sugestii: 'trace (A (k)) = suma (diag (A (k-1) + suma (A (k-1) * B)' ale bez znajomości pełnej macierzy 'A (k -1) ', śledzenia dla' A (k) 'nie można obliczyć, prawda? Myślę, że muszę edytować mój opis. – Giuseppe