R语言 从边填充矩阵元素

lkaoscv7  于 2023-10-13  发布在  其他
关注(0)|答案(1)|浏览(88)

我对制作矩阵有问题
该问题具有以下条件:如果我得到一个矩阵大小,比如n乘m,我应该返回一个填充了1到n*m的整数的矩阵。

fill_matrix = function(n,m){
  #i want to fill but don't know how.......
  return(mat)
}
 > fill_matrix(5,5)
     [,1] [,2] [,3] [,4] [,5]
[1,]    1   16   15   14   13
[2,]    2   17   24   23   12
[3,]    3   18   25   22   11
[4,]    4   19   20   21   10
[5,]    5    6    7    8    9

第一次,似乎可以使用direction_change_vector(ex,down:i+1,右:j+1....)或递归,但我不能得到精确结果。
如果有人有好主意,请告诉我......
我对这个问题感到很沮丧。
谢谢

kb5ga3dv

kb5ga3dv1#

我认为你问题中的问题是寻找一个螺旋矩阵。它有多种实施方式。这里有一个基于迭代的方法来制作你要求的螺旋矩阵

代码

# n and m deonte matrix row and column numbers, respectively
SpiralMatrix <- function(n, m) {
    mat <- matrix(NA, n, m)
    N <- m*n
    u <- l <- 1
    d <- n
    r <- m
    idx <- 1
    while (u <= d && l <= r) {
        # up to down
        for (i in u:d) {
            mat[i, l] <- idx
            if (idx == N) {
                return(mat)
            }
            idx <- idx + 1
        }
        l <- l + 1
        # left to right
        for (i in l:r) {
            mat[d, i] <- idx
            if (idx == N) {
                return(mat)
            }
            idx <- idx + 1
        }
        d <- d - 1
        # down to up
        for (i in d:u) {
            mat[i, r] <- idx
            if (idx == N) {
                return(mat)
            }
            idx <- idx + 1
        }
        r <- r - 1
        # right to left
        for (i in r:l) {
            mat[u, i] <- idx
            if (idx == N) {
                return(mat)
            }
            idx <- idx + 1
        }
        u <- u + 1
    }
}

输出示例

> SpiralMatrix(3, 4)
     [,1] [,2] [,3] [,4]
[1,]    1   10    9    8
[2,]    2   11   12    7
[3,]    3    4    5    6

> SpiralMatrix(5, 3)
     [,1] [,2] [,3]
[1,]    1   12   11
[2,]    2   13   10
[3,]    3   14    9
[4,]    4   15    8
[5,]    5    6    7

> SpiralMatrix(4, 4)
     [,1] [,2] [,3] [,4]
[1,]    1   12   11   10
[2,]    2   13   16    9
[3,]    3   14   15    8
[4,]    4    5    6    7

相关问题