Get all diagonal vectors from matrix

前端 未结 3 1887
我寻月下人不归
我寻月下人不归 2020-12-03 01:09

I\'m trying to figure out how to get all the diagonals of a matrix. For example, say I have the following matrix: A <- matrix(1:16,4)

using the diag(A)

3条回答
  •  无人及你
    2020-12-03 02:02

    Since you're dealing with square matrices, it should be really easy to convert Gavin's answer into a small function that first calculates the range that should be used as the offset values. Here's such a function:

    AllDiags <- function(inmat, sorted = TRUE) {
      Range <- ncol(inmat) - 1
      Range <- -Range:Range
      if (isTRUE(sorted)) Range <- Range[order(abs(Range))]
      lapply(Range, function(x) {
        inmat[row(inmat) == (col(inmat) - x)]
      })
    }
    

    Here's the output on your sample matrix "A".

    AllDiags(A)
    # [[1]]
    # [1]  1  6 11 16
    # 
    # [[2]]
    # [1]  2  7 12
    # 
    # [[3]]
    # [1]  5 10 15
    # 
    # [[4]]
    # [1] 3 8
    # 
    # [[5]]
    # [1]  9 14
    # 
    # [[6]]
    # [1] 4
    # 
    # [[7]]
    # [1] 13
    

提交回复
热议问题