【问题标题】:potentiation matrix with no looping没有循环的增强矩阵
【发布时间】:2014-10-04 06:21:52
【问题描述】:

我没有找到解决我的问题的功能。我有矩阵 A。

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

我想要计算 A^13,而不是带有元素的元素,而是带有列的行。 A^2 示例

A%*%A

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

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

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

【问题讨论】:

  • 在那种情况下从未听说过 potentiation 矩阵,搜索 power 会给你一些答案。

标签: r matrix


【解决方案1】:

也许你正在寻找Reduce:

Reduce("%*%", replicate(13, A, FALSE))
#      [,1] [,2] [,3]
# [1,]    1   13   78
# [2,]    0    1   13
# [3,]    0    0    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
    

    【讨论】:

    • 这是很简单的方法。谢谢。
    • @Nejc Galof 没问题。很高兴它有帮助。
    猜你喜欢
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2019-08-06
    相关资源
    最近更新 更多