【发布时间】:2018-06-08 09:27:26
【问题描述】:
这是一个比较使用Matrix package 与常规R base-matrix 类从稀疏和密集矩阵中提取行的示例。
对于稠密矩阵,基类 matrix 的速度几乎快 395 倍:
library(Matrix)
library(microbenchmark)
## row extraction in dense matrices
D1<-matrix(rnorm(2000^2), 2000, 2000)
D2<-Matrix(D1)
> microbenchmark(D1[1,], D2[1,])
Unit: microseconds
expr min lq mean median uq max neval
D1[1, ] 14.437 15.9205 31.72903 31.4835 46.907 75.101 100
D2[1, ] 5730.730 5744.0130 5905.11338 5777.3570 5851.083 7447.118 100
对于稀疏矩阵,再次支持matrix 几乎是 63 倍。
## row extraction in sparse matrices
S1<-matrix(1*(runif(2000^2)<0.1), 2000, 2000)
S2<-Matrix(S1, sparse = TRUE)
microbenchmark(S1[1,], S2[1,])
Unit: microseconds
expr min lq mean median uq max neval
S1[1, ] 15.225 16.417 28.15698 17.7655 42.9905 45.692 100
S2[1, ] 1652.362 1670.507 1771.51695 1774.1180 1787.0410 5241.863 100
为什么会出现速度差异,有没有办法加快Matrix 包中的提取速度?
【问题讨论】:
标签: r performance matrix sparse-matrix