gpt4 book ai didi

R在对称矩阵中用零替换矩阵元素的更好方法

转载 作者:行者123 更新时间:2023-12-04 19:08:46 25 4
gpt4 key购买 nike

我有一个 0 对角对称矩阵 X,例如

          [1]        [2]       [3]        [4]        [5]    
[1] 0.00000000 0.07065048 0.1019865 0.23641082 0.23641082
[2] 0.07065048 0.00000000 0.0000000 0.23641082 0.23641082
[3] 0.10198654 0.00000000 0.0000000 0.00000000 0.23641082
[4] 0.23641082 0.23641082 0.0000000 0.00000000 0.08870087
[5] 0.23641082 0.23641082 0.2364108 0.08870087 0.00000000

我需要根据第二个矩阵 Y 用 0 替换它的一些元素:
      [1]    [2]
[1] 3 2
[2] 4 3
[3] 1 2

所以 X[3,2], X[4,3], X[1,2] 和,为了对称, X[2,3], X[3,4], X[2,1] 应该被替换与零。

我想出了这个解决方案:
for (i in 1:nrow(Y)) {
X[Y[i,1], Y[i,2]] <- 0
X[Y[i,2], Y[i,1]] <- 0
}

这是在做的伎俩,但我想知道是否有更好,更有效的方法来使用类似应用程序的函数进行编码。

非常感谢您的关注。

最佳答案

这应该有效:

X[Y] <- 0
X[Y[, 2:1]] <- 0

或在一个(平衡的)声明中:
X[rbind(Y[, 1:2],
Y[, 2:1])] <- 0

这种形式的索引通常称为矩阵索引。这是 ?"["的相关部分文档:

A third form of indexing is via a numeric matrix with the one column for each dimension: each row of the index matrix then selects a single element of the array, and the result is a vector. [...]



这将比任何类型的循环都要快,包括 *apply职能。

关于R在对称矩阵中用零替换矩阵元素的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17925294/

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