替换由另一个矩阵索引的矩阵元素

杰瑞

经过几个小时的搜索,我将转向您的专业知识。R的初学者,我尝试加快代码速度。我的目标是替换矩阵中的值A但是,我想替换基于另一个矩阵的两个向量的值BB[, 1]i矩阵的行的名称A第二列B[, 2]对应于matrix的列名称A

我的代码的第一个版本是在循环中使用match函数。

for(k in 1:L){
  i <- B[k,1]
  j <- B[k,2]
  d <- match(i,rownames(A))
  e <- match(j,colnames(A))
  A[d, e] <- 0
  }

第二个版本允许我加快一点:

for( k in 1:L) {
  A[match(B[k,1],rownames(A)), match(B[k,2],colnames(A))] <- 0
  }

但是,处理时间太长,太长。所以我想使用该apply功能。为此,我必须apply在各行中使用的向量B

使用apply函数是个好方法吗?还是我走错路了?

李哲源

在我看来,您可以A[B[, 1:2]] <- 0通过使用矩阵索引的强大功能轻松完成

例如,A[cbind(1:4, 1:4)] <- 0将代替A[1,1]A[2,2]A[3,3]A[4,4]为0。事实上,如果A有“dimnames”属性(以下简称“rownames”和“colnames”你指的),我们还可以使用字符串作为索引。


可复制的例子

A <- matrix(1:16, 4, 4, dimnames = list(letters[1:4], LETTERS[1:4]))
#  A B  C  D
#a 1 5  9 13
#b 2 6 10 14
#c 3 7 11 15
#d 4 8 12 16

set.seed(0); B <- cbind(sample(letters[1:4])), sample(LETTERS[1:4]))
#     [,1] [,2]
#[1,] "d"  "D" 
#[2,] "a"  "A" 
#[3,] "c"  "B" 
#[4,] "b"  "C" 

## since `B` has just 2 columns, we can use `B` rather than `B[, 1:2]`
A[B] <- 0

#  A B  C  D
#a 0 5  9 13
#b 2 6  0 14
#c 3 0 11 15
#d 4 8 12  0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据另一个矩阵的真/假索引替换矩阵中的值?

numpy用另一个矩阵逐元素替换矩阵

使用矩阵元素作为另一个矩阵的索引

如何用取自python中另一个矩阵的索引填充矩阵的元素

如何将一个矩阵的元素替换为另一个

R:从另一个矩阵的元素减去一个矩阵的元素

基于起始索引和终止索引的另一个矩阵的索引矩阵

用R中的另一个矩阵替换一个矩阵

用另一个矩阵替换一个矩阵

根据另一个矩阵的值索引一个矩阵

如何用另一个矩阵的值(使用Rcpp)替换C ++中矩阵的元素?

创建一个矩阵,其中另一个矩阵采用元素

将一个矩阵设置为另一个矩阵的元素

将一个矩阵分配为另一个矩阵的元素

在“ R”中创建一个矩阵,该矩阵中的每个元素都是另一个矩阵

用numpy中的另一个小矩阵替换矩阵的子部分

矩阵索引用另一个矩阵子集

使用存储在另一个矩阵中的索引访问数据矩阵

通过numpy中的索引数组从另一个矩阵填充空矩阵的行

将矩阵元素转移到另一个矩阵的对角线上

numpy:从另一个矩阵的所有元素中减去矩阵而没有循环

用另一个矩阵对矩阵中的行元素进行排序

根据另一个矩阵删除矩阵行?

python:将一个矩阵的值按位置替换成另一个矩阵

将一个矩阵中的 NA 替换为另一个矩阵中相应位置的值

numpy:使用一个矩阵作为另一个矩阵的索引来创建张量吗?

每当列中缺少索引时,将一个矩阵插入另一个矩阵

在MATLAB中计算一个矩阵与另一个矩阵之间的差矩阵

如何取由另一个向量表示的矩阵行的联合?