gpt4 book ai didi

从R中的矩阵中删除对角线元素

转载 作者:行者123 更新时间:2023-12-02 05:15:19 24 4
gpt4 key购买 nike

如何使用 R 从矩阵 L 中删除对角线元素 (diagL)?我尝试使用以下内容:

subset(L, select=-diag(L)) or
subset(L, select=-c(diag(L)))

但是我得到了 0 个数字...

最佳答案

R 编程语言?我更喜欢 C,它更容易拼写。

一种方法是按照我喜欢的方式创建一个包含数字的矩阵:

a<-t(matrix(1:16,nrow=4,ncol=4))

看起来像:

     [,1] [,2] [,3] [,4]
[1,] 1 2 3 4
[2,] 5 6 7 8
[3,] 9 10 11 12
[4,] 13 14 15 16

删除对角线上的值:

diag(a)=NA

结果是:

     [,1] [,2] [,3] [,4]
[1,] NA 2 3 4
[2,] 5 NA 7 8
[3,] 9 10 NA 12
[4,] 13 14 15 NA

要真正删除这些值,而不仅仅是让它们消失,我们需要重新转换:

a<-t(matrix(t(a)[which(!is.na(a))],nrow=3,ncol=4))

结果是:

     [,1] [,2] [,3]
[1,] 2 3 4
[2,] 5 7 8
[3,] 9 10 12
[4,] 13 14 15

这与我们在上面的 C 中得到的结果是一样的。

这有点迂回,但它得出了我认为正确的答案。我有兴趣看到比我更了解 R 的人提供的改进解决方案。

对作业的一些解释:

a<-t(matrix(t(a)[which(!is.na(a))],nrow=3,ncol=4))
  1. !is.na(a)为我们提供了一个包含 TRUE、FALSE 值的列表,其中元素已被清空。
  2. which(!is.na(a))为我们提供了每个真实元素的下标列表。
  3. t(a)转置矩阵,因为我们需要根据 #2 中的下标进行拉取。
  4. t(a)[which(!is.na(a))]给我们一个缺少对角线 NA 值的数字列表。
  5. matrix(t(a)[which(!is.na(a))],nrow=3,ncol=4)将#4 中的列表转换为矩阵,这是我们想要的转置。
  6. a<-t(matrix(1:16,nrow=4,ncol=4)) (整个事情)将 #5 转置为我们想要的形式并将其分配给 a变量。

这适用于 a<-t(matrix(11:26,nrow=4,ncol=4)) 等情况.

关于从R中的矩阵中删除对角线元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18839090/

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