通过索引向向量添加值 - 提高速度

时间:2016-11-25 10:59:01

标签: r indexing

我有一个索引矩阵和一个值向量,它与矩阵中的行数一样长。我有一个输出向量,其长度与值相同,但全部为零。

对于矩阵中位置(i,j)的每个条目c,我需要将值[i]添加到输出[c] - 也就是说,对于矩阵的每个条目,我必须找到输出的值在该索引处的向量,并将由条目出现的矩阵的行索引的值向量中的数字添加到其中。

例如,如果values = [1,2,3,4]且mx_indices是

[1,1,
2,2,
3,3
1,2]

然后输出应为[6,8,6,0]

这是我尝试的简单R代码:

# Example: values has 10 entries, and we have 100 types to compute
mx_indices <- matrix(floor(runif(1000)*10), ncol = 10, nrow=100)
values <- 1:100
output <- rep(0,10)
for(i in 1:length(values)){
    for(j in mx_indices[i,]){
        output[j] <- output[j] + values[i]
    }
}

它有效,但速度很慢。我将重复这样做一个矩阵,它有很多行(50万是最低限度)和长'值'向量。

我有什么办法可以加快速度吗?我有没有明显的错误?

由于

编辑:我在示例和代码中有错误。

1 个答案:

答案 0 :(得分:1)

mx_indices <- matrix(sample(1:9, 1000, TRUE), ncol = 10, nrow=100)
values <- 1:100

rowSums(matrix(values[mx_indices], ncol=ncol(mx_indices)))