我想对两个大矩阵进行元素乘法,我想尽可能最有效地做到这一点。
目前我正在使用基本运算符*
例如,如果我有一个如下所示的 DF1:
A | B |
---|---|
1 | 2 |
3 | 4 |
还有像下一个这样的 DF2:
X | 是 |
---|---|
5 | 6 |
7 | 8 |
DF1*DF2 结果为
X | 是 |
---|---|
5 | 12 |
21 | 32 |
我怎样才能让它更快?
您可以尝试
f3()
中的方法,例如
set.seed(0)
A <- as.data.frame(matrix(runif(100), 10, 10))
B <- as.data.frame(matrix(runif(100), 10, 10))
f1 <- function() A * B
f2 <- function() as.data.frame(as.matrix(A) * as.matrix(B))
f3 <- function() as.data.frame(`dim<-`(unlist(A, FALSE, FALSE) * unlist(B, FALSE, FALSE), dim(A)))
microbenchmark(
f1(),
f2(),
f3(),
check = "equal",
unit = "relative"
)
你会看到
Unit: relative
expr min lq mean median uq max neval
f1() 19.372385 17.307953 10.091387 15.56534 15.536671 1.3039171 100
f2() 5.589958 5.172589 2.967515 4.59233 4.151339 0.7771889 100
f3() 1.000000 1.000000 1.000000 1.00000 1.000000 1.0000000 100