【问题标题】:Simultaneously applying each element of a matrix to a function in R同时将矩阵的每个元素应用于 R 中的函数
【发布时间】:2020-04-10 13:58:32
【问题描述】:

我模拟了三个矩阵,希望实现一个功能。

很难解释这个函数,但我认为 FOR LOOP 的以下代码很好,很容易解释我想做的事情。

A=matrix(1:10000,100,100)
B=matrix(2:10001,100,100)
C=matrix(3:10002,100,100)

for (i in 1:100) {
  for (j in 1:100) {
    print(min(C[B>A[i,j]]))
  }
}

但是,实际上每个的矩阵会大得多,例如 1000 * 1000,导致 FOR LOOP 消耗大量时间。我在二维中尝试了 apply(),但根据 system.time(),它根本没有改善。

apply(A, 1:2, function(x) print(min(C[B>x])))

我想知道是否有任何方法可以优化这个函数,使其更快,或者简而言之,同时使用矩阵 A 的每个元素。

非常感谢提前!

【问题讨论】:

    标签: r for-loop matrix apply


    【解决方案1】:

    为了使您的示例易于管理和理解,我减少了矩阵的维度。

    A=matrix(1:10,2,5)
    B=matrix(2:11,2,5)
    C=matrix(3:12,2,5)
    

    运行你的函数给出:

    for (i in 1:2) {
       for (j in 1:5) {
         print(min(C[B>A[i,j]]))
       }
    }
    
    #[1] 3
    #[1] 5
    #[1] 7
    #[1] 9
    #[1] 11
    #[1] 4
    #[1] 6
    #[1] 8
    #[1] 10
    #[1] 12
    

    我们可以使用sapplyA 的每个元素进行测试,然后如果需要将其转换为与A 相同维度的矩阵。

    out <- sapply(A, function(x) min(C[B > x]))
    dim(out) <- dim(A)
    
    out
    #     [,1] [,2] [,3] [,4] [,5]
    #[1,]    3    5    7    9   11
    #[2,]    4    6    8   10   12
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-02
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多