2016-11-25 58 views
0

我有一個索引矩陣和一個向量值,它與矩陣中的行數一樣長。我有一個輸出向量,其長度與值相同,但全部爲零。通過索引向向量添加值 - 提高速度

對於矩陣中位置(i,j)處的每個條目c,我需要將值[i]添加到輸出[c] - 也就是說,對於矩陣的每個條目,我必須找到在該索引處輸出矢量,並向其添加由向量出現的矩陣的行索引的值向量中的數字。

舉例來說,如果值= [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
mx_indices <- matrix(sample(1:9, 1000, TRUE), ncol = 10, nrow=100) 
values <- 1:100 

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

嗨貝里,謝謝你的回答。我意識到在我的問題中存在一些錯誤,我已經整理並嘗試了您的解決方案,但沒有給出正確的答案,如示例中所示。 – Tom

+0

你的examle有myindices和零 - 在R中,沒有矢量的第零個元素。代碼在這裏可以正常工作:'values < - 1:4; mx_indices < - 矩陣(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))) ' –

+0

哦,你重提你的問題。我想我沒有得到你想要做的。 –