gpt4 book ai didi

r - 如何填充非对角线并忽略 R 矩阵中的对角线?

转载 作者:行者123 更新时间:2023-12-02 16:51:29 25 4
gpt4 key购买 nike

我试图在 R 中填充一个矩阵,其中最终结果将忽略对角线条目,并且值将填充在对角线周围。我的意思的一个简单示例是,如果我采用如下所示的简单 3x3 矩阵:

ab <- c(1:9)
mat <- matrix(ab,nrow=3,ncol=3)
colnames(mat)<- paste0("x", 1:3)
rownames(mat)<- paste0("y", 1:3)
mat

x1 x2 x3
y1 1 4 7
y2 2 5 8
y3 3 6 9

我想要实现的是用 0 填充对角线并移动对角线周围的所有其他值。所以,例如,如果我只使用 diag(mat)<-0结果是:

   x1 x2 x3
y1 0 4 7
y2 2 0 8
y3 3 6 0

然而,我正在寻找的结果是这样的(值环绕对角线):

   x1 x2 x3
y1 0 3 5
y2 1 0 6
y3 2 4 0

我不担心从矩阵中推出的值(即 7、8、9)。

有什么建议吗?

谢谢

编辑:下面的 upvoted 解决方案,似乎已经解决了问题

最佳答案

适用于您的示例的一个解决方案是首先声明一个除对角线外全为 1 的矩阵:

M <- 1 - diag(3)

然后用所需的非对角线值替换所有值

M[M == 1] <- 1:6
M
# [,1] [,2] [,3]
# [1,] 0 3 5
# [2,] 1 0 6
# [3,] 2 4 0

更复杂的情况(例如不为 0 的对角线系数,或未知数量的非对角线元素)可能需要一些额外的工作。

关于r - 如何填充非对角线并忽略 R 矩阵中的对角线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58507771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com