R 无环增强矩阵

R 无环增强矩阵,r,matrix,R,Matrix,我找不到解决我问题的函数。我有矩阵A A<-matrix(c(1,0,0,1,1,0,0,1,1),3,3) 我可以使用循环,但我的问题是:有没有简单的方法或函数来计算循环 ^13的结果必须是: [1 13 78] [0 1 13] [0 0 1] 也许您正在寻找Reduce: Reduce("%*%", replicate(13, A, FALSE)) # [,1] [,2] [,3] # [1,] 1 13 78 # [2,] 0 1

我找不到解决我问题的函数。我有矩阵A

 A<-matrix(c(1,0,0,1,1,0,0,1,1),3,3)
我可以使用循环,但我的问题是:有没有简单的方法或函数来计算循环

^13的结果必须是:

[1 13 78]
[0  1 13]
[0  0  1]  

也许您正在寻找
Reduce

Reduce("%*%", replicate(13, A, FALSE))
#      [,1] [,2] [,3]
# [1,]    1   13   78
# [2,]    0    1   13
# [3,]    0    0    1

您可以使用
expm

 library(expm)
 A%^%13
 #   [,1] [,2] [,3]
 #[1,]    1   13   78
 #[2,]    0    1   13
 #[3,]    0    0    1
基准 关于一个较小的矩阵

 set.seed(42)
 A <- matrix(sample(0:1, 100*100, replace=TRUE), 100, 100)
 f1 <- function() Reduce("%*%", replicate(200, A, FALSE))
 f2 <- function() A%^%200

 library(microbenchmark)
 microbenchmark(f1(), f2(), unit="relative", times=25L)
 # Unit: relative
 #expr      min       lq   median      uq      max neval
 #f1() 237.8381 237.6059 235.6788 239.053 225.3443    25
 #f2()   1.0000   1.0000   1.0000   1.000   1.0000    25
set.seed(42)

A这是一个很好的简单方法。谢谢。@Nejc,没问题。很高兴能帮上忙。从未听说过增强矩阵在这种情况下,寻找权力会给你一些答案。
 set.seed(42)
 A <- matrix(sample(0:1, 100*100, replace=TRUE), 100, 100)
 f1 <- function() Reduce("%*%", replicate(200, A, FALSE))
 f2 <- function() A%^%200

 library(microbenchmark)
 microbenchmark(f1(), f2(), unit="relative", times=25L)
 # Unit: relative
 #expr      min       lq   median      uq      max neval
 #f1() 237.8381 237.6059 235.6788 239.053 225.3443    25
 #f2()   1.0000   1.0000   1.0000   1.000   1.0000    25