增强矩阵没有循环

时间:2014-10-04 06:21:53

标签: r matrix

我找不到解决问题的方法。我有矩阵A.

 A<-matrix(c(1,0,0,1,1,0,0,1,1),3,3)

我想要计算A ^ 13,不是elelement元素,而是行有列。 A ^ 2

的示例
A%*%A

我可以使用循环,但我的问题是:是否有简单的方法或函数来计算它?

我对A ^ 13的结果必须是:

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

2 个答案:

答案 0 :(得分:3)

也许您正在寻找Reduce

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

答案 1 :(得分:2)

您可以使用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