好吧,我早些时候问过这个问题,但我因为没有指定任何内容并且没有显示出之前尝试的迹象而受到了(理应的)批评。所以让我再试一次..
I'm using R, and I have a 463✕463 matrix. What I would like to do is to replace all elements other than the diagonal ones (X11, X22, X33,...,Xjj) with zero.
例如。我想:
[1 4 5
2 3 5
3 9 8]
to be:
[1 0 0
0 3 0
0 0 8]
当我使用diag()
函数,它只是给我一个对角线值的列向量。我想我可以使用replace()
函数以某种方式与“如果不是对角线”逻辑相结合......但我迷路了。
是的,正如这里的一些人所猜测的那样,我可能比这里的许多人年轻得多,并且在这方面完全陌生......所以请让我走向正确的方向。非常感谢您的所有帮助!
在 R 中,diag
方法有两个功能。
-
It returns矩阵的对角线。 IE。
m <- matrix(1:9, ncol=3)
m
# [,1] [,2] [,3]
# [1,] 1 4 7
# [2,] 2 5 8
# [3,] 3 6 9
diag(m)
# [1] 1 5 9
-
It can 构造对角矩阵。
diag(1:3)
# [,1] [,2] [,3]
# [1,] 1 0 0
# [2,] 0 2 0
# [3,] 0 0 3
因此,在您的情况下,从现有矩阵中提取对角线并将其提供给diag
:
diag(diag(m))
# [,1] [,2] [,3]
# [1,] 1 0 0
# [2,] 0 5 0
# [3,] 0 0 9
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)