Blockwise sum of matrix elements

前端 未结 3 1730
悲哀的现实
悲哀的现实 2020-12-18 01:39

I want to go from something like this:

1> a = matrix(c(1,4,2,5,2,5,2,1,4,4,3,2,1,6,7,4),4)
1> a
     [,1] [,2] [,3] [,4]
[1,]    1    2    4    1
[2,]          


        
3条回答
  •  春和景丽
    2020-12-18 02:38

    You can use matrix multiplication for this.

    # Computation matrix:
    
    mat <- function(n, r) {
      suppressWarnings(matrix(c(rep(1, r), rep(0, n)), n, n/r))
    }
    

    Square-matrix example, uses a matrix and its transpose on each side of a:

    # Reduce a 4x4 matrix by a factor of 2:
    
    x <- mat(4, 2)
    x
    ##      [,1] [,2]
    ## [1,]    1    0
    ## [2,]    1    0
    ## [3,]    0    1
    ## [4,]    0    1
    
    t(x) %*% a %*% x
    ##      [,1] [,2]
    ## [1,]   12   15
    ## [2,]   10   16
    

    Non-square example:

    b <- matrix(1:24, 4 ,6)
    t(mat(4, 2)) %*% b %*% mat(6, 2)
    ##      [,1] [,2] [,3]
    ## [1,]   14   46   78
    ## [2,]   22   54   86
    

提交回复
热议问题