如何通过对角线填充将矢量转换为交叉矩阵?

时间:2015-07-28 12:24:51

标签: arrays r

如何将矢量转换为只填充第一个对角线的矩阵(2d数组)?

x <- 1:3
y <- array(dim=c(3,3))
y[x,x] <- x
> y
     [,1] [,2] [,3]
[1,]    1    1    1
[2,]    2    2    2
[3,]    3    3    3

所以y代替:

     [,1] [,2] [,3]
[1,]    1   NA   NA
[2,]   NA    2   NA
[3,]   NA   NA    3

这闻起来有一个微不足道的解决方案,但我还没有看到它。

由于

1 个答案:

答案 0 :(得分:1)

您可以尝试

 (NA^!diag(x))*diag(x)
 #     [,1] [,2] [,3]
 #[1,]    1   NA   NA
 #[2,]   NA    2   NA
 #[3,]   NA   NA    3

或者用较少的代码打高尔夫球

 x1 <- diag(x)
 x1[lower.tri(x1, diag=FALSE)|upper.tri(x1, diag=FALSE)] <- NA

@David Arenburg建议的其他选项是创建NA矩阵,然后用'x'填充对角线

 res <- matrix(NA, length(x), length(x)) 
 diag(res) <- x
相关问题