Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中创建一个增加同心环数的矩阵_R_Matrix - Fatal编程技术网

在R中创建一个增加同心环数的矩阵

在R中创建一个增加同心环数的矩阵,r,matrix,R,Matrix,我需要在R中写一个函数,它创建一个由递增的数字同心环组成的矩阵。此函数的参数有许多层。例如,如果x=3,矩阵将如下所示: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 我不知道怎么做。如果有任何建议,我将不胜感激。试试这个: x<-3 res<-matrix(nrow=2*x-1,ncol=2*x-1) for (i in 1:x) res[i:(2*x-i),i:(2*x-i)]<-i res #

我需要在R中写一个函数,它创建一个由递增的数字同心环组成的矩阵。此函数的参数有许多层。例如,如果x=3,矩阵将如下所示:

1 1 1 1 1  
1 2 2 2 1  
1 2 3 2 1  
1 2 2 2 1  
1 1 1 1 1
我不知道怎么做。如果有任何建议,我将不胜感激。

试试这个:

x<-3
res<-matrix(nrow=2*x-1,ncol=2*x-1)
for (i in 1:x) res[i:(2*x-i),i:(2*x-i)]<-i
res
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    1    1    1    1
#[2,]    1    2    2    2    1
#[3,]    1    2    3    2    1
#[4,]    1    2    2    2    1
#[5,]    1    1    1    1    1
x <- 3 # input

n <- 2*x-1
m <- diag(n)
x - pmax(abs(row(m) - x), abs(col(m) - x))
x1)试试这个:

x <- 3 # input

n <- 2*x-1
m <- diag(n)
x - pmax(abs(row(m) - x), abs(col(m) - x))
2)第二种方法是:

x <- 3 # input

n <- 2*x-1
mid <- pmin(1:n, n:1)  # middle row/column
outer(mid, mid, pmin)

其中任何一项都给出:

     [,1] [,2] [,3] [,4] [,5]
[1,]    3    3    3    3    3
[2,]    3    2    2    2    3
[3,]    3    2    1    2    3
[4,]    3    2    2    2    3
[5,]    3    3    3    3    3

kicks的递归解(仅奇数n)


f这是逻辑,在R中自己实现它

  • 创建行数和列数等于2*x-1且 用零填充它,然后开始遍历数组,从(0,0)到 (2*x-2,2*x-2)
  • 现在,在每个单元上,计算单元的“级别”。水平 该单元是它与四个边界的最近距离 矩阵,即min(i,j,2*x-2-i,2*x-2-j)
  • 此“级别”值是要放入单元格的值
pmax(abs(row(m) - x), abs(col(m) - x)) + 1
x - outer(mid, mid, pmin) + 1
outer(Dist, Dist, pmax) + 1
     [,1] [,2] [,3] [,4] [,5]
[1,]    3    3    3    3    3
[2,]    3    2    2    2    3
[3,]    3    2    1    2    3
[4,]    3    2    2    2    3
[5,]    3    3    3    3    3
f <- function(n) if (n == 1) 1 else `[<-`(matrix(1,n,n), 2:(n-1), 2:(n-1), 1+Recall(n-2))

f(5)

#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    1    1    1    1
# [2,]    1    2    2    2    1
# [3,]    1    2    3    2    1
# [4,]    1    2    2    2    1
# [5,]    1    1    1    1    1