【问题标题】:Adding values to a vector by index - improve speed按索引向向量添加值 - 提高速度
【发布时间】:2016-11-25 10:59:00
【问题描述】:

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

对于矩阵中位置 (i,j) 的每个条目 c,我需要将 values[i] 添加到 output[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]
    }
}

它可以工作,但速度很慢。对于一个有很多行的矩阵(最少一百万)和一个长的“值”向量,我将重复执行此操作。

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

谢谢

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

【问题讨论】:

    标签: r indexing


    【解决方案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)))
    

    【讨论】:

    • 嗨贝瑞,感谢您的回答。我意识到我的问题中有一些错误,我已经整理并尝试了您的解决方案,但它没有给出正确的答案,如示例中所示。
    • 您的示例有带零的 myindices - 在 R 中,向量没有第零个元素。代码在这里工作正常:values &lt;- 1:4; mx_indices &lt;- matrix(c(1,2,3,1, 1,2,3,2), ncol=2); mx_indices; values[mx_indices]; rowSums(matrix(values[mx_indices], ncol=ncol(mx_indices)))
    • 哦,你重新定义了你的问题。我想我不明白你想要做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    • 1970-01-01
    相关资源
    最近更新 更多