创建具有限制的对角线矩阵

  • 本文关键字:对角线 有限制 创建 r
  • 更新时间 :
  • 英文 :

0 1 3 5 7
1 0 3 5 7
1 3 0 5 7
1 3 5 0 7
1 3 5 7 0

我必须生成上面的矩阵,但是我有一些限制。我不允许使用任何内置功能,例如Matrix((,cbind((,rbind(((length(((或任何环。我必须将应用功能用于此问题。

该函数只有一个参数(假设7(可以生成此矩阵。

我解决这个问题的方法是,我创建一个启动向量,然后使用Sapply函数将此启动向量转换为矩阵。之后,我想在该矩阵上操作以获取所需的输出。

您正确识别可以使用sapply解决问题。请参阅下面的代码(快速& dirty(:

n <- 7
gen_xs <- function(x) c(0, seq(1, x, 2))
move0 <- function(x, pos) {
  if (pos == 0)
    return(x)
  if (pos == length(x) - 1)
    return (c(x[-1], 0))
  xt <- x[x != 0]
  c(xt[1:pos], 0, xt[(pos + 1):length(xt)] )
}
t(sapply(0:((n + 1) / 2), function(x) move0(gen_xs(n), x)))

输出:

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

最新更新