首页 > 解决方案 > R中的矢量化循环,将矩阵中每一行中的所有值相加

问题描述

我没有找到我的问题的答案,虽然它看起来很容易 - 如果已经回答,请原谅我。我正在处理定向加权网络数据,我想通过对每个邻居的值求和并通过边的权重加权来计算每个节点对其传出邻居的某些属性的“展示”。

使用循环很容易做到这一点。g[] 是我得到的邻接矩阵:

    library(igraph)
    #Data example
    relations <- data.frame(from=c("Bob", "Cecil", "Cecil", "David", "David", "Esmeralda"),
                            to=c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
                            weight=c(4,5,5,2,1,1))
    g <- graph.data.frame(relations, directed=TRUE)                 

    # Loop
    for (i in c(1:nrow(g[]))){
      nodes$neigh_activity[[i]] <- sum(nodes[which(g[i,]>0), ]$activity*g[i, which(g[i,]>0)])
    }

我想对这个循环进行矢量化。事实上,在我的实际数据中,我有超过 90,000 个节点,所以需要一段时间......我听说矢量化可以大大减少计算时间。

我不确定要走的路,因为我无法输入向量,g[i,]否则总和会中断。我尝试使用 split 并使用向量列表,但这似乎效率更低。

太感谢了!罗宾

标签: rloopsvectorizationigraph

解决方案


从这个答案:Matrix-class (dgCMatrix) 的 rowsum 函数的等价物

Matrix::rowSums(g[])

推荐阅读