Ich habe eine n x n Symmetrix Toeplitz-Matrix T
, ein Vektor v
der Länge n, und ich möchte das Matrix-Vektor-Produkt T%*%v
schnell berechnen. Gibt es ein Paket in R, das die Methode der schnellen Fourier-Transformation zur Berechnung T%*%v
(oder eine andere Methode, falls eine existiert) verwenden kann? Zum Beispiel hat Matlab das Toeplitzmult-Paket.Toeplitz Matrix-Vektor Multiplikation in R
-1
A
Antwort
1
Die folgende Funktion funktioniert. Beachten Sie, dass die Funktion ifft()
die Bibliothek pracma
benötigt.
toepmult <- function(A,v){
n <- nrow(A)
x <- as.matrix(c(A[1,],0,A[1,][n:2]))
p <- c(v,rep(0,n))
h <- as.vector(fft(p)*fft(x))
out <- Re(pracma::ifft(h)[1:n])
return(matrix(out,n))
}
Für einen Vektor/Matrix der Größe 1000 die toepmult
Funktion nimmt etwa 18% der Zeit A%*%v
dauert.
A <- toeplitz(runif(1000))
v <- runif(1000)
microb(A%*%v,toepmult(A,v),times=1000)
#Unit: microseconds
# expr min lq mean median uq max neval
# A %*% v 1515.858 1597.345 1809.3517 1693.533 1957.4350 3868.788 1000
# toepmult(A, v) 185.901 215.395 331.2928 298.435 347.7335 4611.285 1000
#[[1]]
# [,1] [,2]
#median 1693.533 298.435
#ratio 1.000 0.176
#diff 0.000 -1395.098
Für einen Vektor/Matrix der Größe 10.000, die toepmult
Funktion nimmt ungefähr 2,5% der Zeit A%*%v
dauert.
A <- toeplitz(runif(10000))
v <- runif(10000)
microb(A%*%v,toepmult(A,v),times=1000)
#Unit: milliseconds
# expr min lq mean median uq max neval
# A %*% v 145.834304 160.395663 181.842779 170.396014 186.221449 495.2003 1000
# toepmult(A, v) 2.802058 4.077408 4.990894 4.322707 4.911103 180.4926 1000
#[[1]]
# [,1] [,2]
#median 170.396 4.323
#ratio 1.000 0.025
#diff 0.000 -166.073
Verwandte Themen
- 1. Toeplitz-Matrix von Toeplitz-Matrix
- 2. Produkt von zwei Toeplitz Matrizen?
- 3. Multiplikation zweier Matrizen in R
- 4. randomisierte elementweise Multiplikation in R
- 5. R-Indexierung, Matrix-Multiplikation
- 6. Toeplitz Matrix Initialisierung
- 7. Multiplikation 2 Zoo-Serie in R
- 8. Multiplikation aller Elemente eines Vektors in R
- 9. R: Einfache Multiplikation verursacht Integer-Überlauf
- 10. Multiplikation von Kombinationen einer Liste von Listen in R
- 11. berechnet nur Diagonalen der Matrix-Multiplikation in R
- 12. Matrix-Multiplikation in R: erfordert numerische/komplexe Matrix/Vektorargumente
- 13. Rekursive Multiplikation in Prolog
- 14. Multiplikation
- 15. Matrix Multiplikation in Rcpp
- 16. Matrix-Multiplikation in Prolog
- 17. Multiplikation in GF (p)
- 18. Multiplikation in einer Variablen
- 19. Boolesche Multiplikation in C++?
- 20. Ausführen Multiplikation in SQL
- 21. Doppelte Multiplikation in C#
- 22. Matrix Multiplikation in hadoop
- 23. Multiplikation in C# -Fehler
- 24. NaN in Multiplikation
- 25. Running Multiplikation in Excel
- 26. Matrix Multiplikation in Keras
- 27. Matrix Multiplikation In C
- 28. Multiplikation in Python
- 29. Multiplikation In MASM611
- 30. Matrix Multiplikation in Pandas