gpt4 book ai didi

更有效地复制函数

转载 作者:行者123 更新时间:2023-12-01 10:46:04 26 4
gpt4 key购买 nike

假设我有以下矩阵。

x <- matrix(seq(1:4), 2, 2)
y <- matrix(seq(1:4), 2, 2)

我想做以下事情。

for(i in 1:5)
{
x <- x %*% y
}

然而,这是一个简单的例子。我通常有 X 和 Y 的大矩阵,我也是一个很大的数字。因此,使用 for 循环可能太耗时了。

有没有人知道对这些类型使用 lapply 或 apply 函数。

谢谢。

最佳答案

library(expm)
x %*% (y %^% 5)
# [,1] [,2]
#[1,] 5743 12555
#[2,] 8370 18298

基准:

set.seed(42)
x <- matrix(rnorm(1e4), 1e2, 1e2)
y <- matrix(rnorm(1e4), 1e2, 1e2)

fun1 <- function(x, y, j) {
for(i in 1:j)
{
x <- x %*% y
}
x
}

fun2 <- function(x, y, i) {
x %*% (y %^% i)
}

fun3 <- function(x, y, i) {
Reduce("%*%", c(list(x), rep(list(y), i)))
}


library(expm)
all.equal(fun1(x,y,5), fun2(x,y,5))
#[1] TRUE
all.equal(fun1(x,y,5), fun3(x,y,5))
#[1] TRUE

library(microbenchmark)
microbenchmark(fun1(x,y,30),
fun2(x,y,30),
fun3(x,y,30), times=10)


#Unit: milliseconds
# expr min lq median uq max neval
#fun1(x, y, 30) 21.317917 21.908592 22.103380 22.182989 141.933427 10
#fun2(x, y, 30) 5.899368 6.068441 6.235974 6.345301 6.477417 10
#fun3(x, y, 30) 21.385668 21.896274 22.023001 22.086904 22.269527 10

关于更有效地复制函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25807577/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com