1
更高效地实现以下功能的任何想法?R功能效率
prod_A_B <- function(A, B, i = NULL, j = NULL) {
if (is.null(i) & is.null(j)) {
A * B
} else if (!is.null(i) & is.null(j)) {
A[i, ] * B[i, ]
} else if (!is.null(i) & !is.null(j)) {
A[i, j] * B[i, j]
}
}
特别是,是否有可能使条件语句更清晰的实现,从而导致运行时间减少?
这里有一些基准:
n <- 1e5
d <- 200
A <- matrix(rnorm(n*d), nrow = n, ncol = d)
B <- matrix(rnorm(n*d), nrow = n, ncol = d)
pr1 <- pr2 <- matrix(0, nrow=n, ncol =d)
tm <- microbenchmark(
{for(i in 1:n) pr1[i,] <- prod_A_B(A, B, i)},
{for(i in 1:n) pr2[i, ] <- A[i,] * B[i,]},
times=100L)
print(tm)
Unit: milliseconds
min lq mean median uq max neval
1164.4078 1208.348 1234.607 1224.097 1254.059 1370.098 100
969.9961 1004.821 1036.738 1021.025 1056.182 1278.767 100
的差别并不大给出的矩阵大小,但我还是想知道我是否能提高性能有点...
谢谢!
我建议在这里发帖:http://codereview.stackexchange.com/代码审查 – SpaceCowboy
你可以'输''A','B'吗? –
@SpaceCowboy好吧,我也会在那里发帖,谢谢! – ixpl