Extracting off-diagonal slice of large matrix

后端 未结 3 1687
野性不改
野性不改 2020-12-09 05:09

I\'ve got a large nxn matrix and would like to take off-diagonal slices of varying sizes. For example:

1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3          


        
3条回答
  •  爱一瞬间的悲伤
    2020-12-09 05:52

    size <- 6
    mat <- matrix(seq_len(size ^ 2), ncol = size)
    
    
    low <- 0
    high <- 3
    
    delta <- rep(seq_len(ncol(mat)), nrow(mat)) - 
        rep(seq_len(nrow(mat)), each = ncol(mat))
    #or Ben Bolker's better alternative
    delta <- row(mat) - col(mat)
    mat[delta < low | delta > high] <- NA
    mat
    

    this works with 5000 x 5000 matrices on my machine

提交回复
热议问题