更快的矩阵行循环方式

  • 本文关键字:循环 方式 r
  • 更新时间 :
  • 英文 :


我有一个以下矩阵:-

matA <- matrix(c(0, 1, 1, 0, 0, 1,
1, 0, 0, 1, 1, 0,
1, 0, 0, 0, 1, 0,
0, 1, 0, 0, 0, 1,
0, 1, 1, 0, 0, 1,
1, 0, 0, 1, 1, 0),
nrow = 6, ncol = 6, byrow = TRUE)

实际矩阵相当大(请记住这一点(。

我有以下表格的清单

listA <- list(c(2, 3, 6), c(1, 4, 5), c(1, 5), c(2, 6), c(2, 3, 6), c(1, 4, 5))

现在,listA指定了1在矩阵中的位置。我用以下方式将这个矩阵转换为行标准化形式:-

rowsumz <- unlist(lapply(listA, length))
for(i in 1:nrow(matA)){
matA[i, listA[[i]]] <- matA[i, listA[[i]]]/rowsumz[i]
}

有没有更快的方法????

您可以尝试

matA / rowSums(matA)

matA / lengths(listA)

您将获得

[,1]      [,2]      [,3]      [,4]      [,5]      [,6]
[1,] 0.0000000 0.3333333 0.3333333 0.0000000 0.0000000 0.3333333
[2,] 0.3333333 0.0000000 0.0000000 0.3333333 0.3333333 0.0000000
[3,] 0.5000000 0.0000000 0.0000000 0.0000000 0.5000000 0.0000000
[4,] 0.0000000 0.5000000 0.0000000 0.0000000 0.0000000 0.5000000
[5,] 0.0000000 0.3333333 0.3333333 0.0000000 0.0000000 0.3333333
[6,] 0.3333333 0.0000000 0.0000000 0.3333333 0.3333333 0.0000000

最新更新