【问题标题】:Resizing matrix with constraints in R在 R 中使用约束调整矩阵大小
【发布时间】:2019-10-31 21:52:10
【问题描述】:

我有一个看起来像这样的 5x5 矩阵

A<- matrix(c(24,18,18,24,56,
         0,0,2,8,32,
         3,12,6,27,1,
         9,8,14,39,51,
         34,45,0,17,0),nrow=5,byrow=F)

我想将其调整为 2x2,看起来像这样

C <- matrix(c(sum(A[1:2,1:2]),
          sum(A[1:2,3:5]),
          sum(A[3:5,1:2]),
          sum(A[3:5,3:5])),nrow=2,byrow = T)

有没有更短的方法来做到这一点?非常感谢!

【问题讨论】:

    标签: r matrix linear-algebra


    【解决方案1】:

    这不是那么短,但是如果您想编写一个函数以供重用,它可能会有所帮助。

    这里,我注意到最初的A[1:j, 1:j]是第一个子矩阵,知道j可以确定剩下的子矩阵。

    j <- 2
    n <- nrow(A)
    p <- ncol(A)
    
     matrix(c(sum(A[1:j, 1:j]), sum(A[1:j, (j+1):p]), 
             sum(A[(j+1):n, 1:j]), sum(A[(j+1):n , (j+1):p])),
             nrow = 2, byrow = TRUE)
    
    #      [,1] [,2]
    # [1,]   42  111
    # [2,]  140  155
    

    【讨论】:

    • 别担心,@hnguyen。请点击最有帮助的答案旁边的勾号。
    【解决方案2】:

    如果您有一个 m x m 矩阵,并且您想将其汇总为一个 n x n 矩阵,那么虽然它不短,但它会起作用:

    n = 2
    
    #assume m x m matrix
    n_row <- nrow(A)
    lst = list(1:floor(n_row / n), ceiling(n_row/ n): n_row)
    
    matrix(
      apply(expand.grid(seq_len(n), seq_len(n)),
          1,
          function(i) sum(A[lst[[i[1]]], lst[[i[2]]]])
          ),
      n)
    

    【讨论】:

    • 绝对没有我的那么混乱。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多