2015-11-03 96 views
1

條目在我的程序我有多個尺寸萬條這樣的數組最聰明的辦法:NumbaPro - 排序二維數組,然後求和的相同的密鑰

arr=[(1,0.5), (4,0.2), (321, 0.01), (2, 0.042), (1, 0.01), ...] 

我反而讓兩個數組如果有幫助,則使用相同的順序(而不是具有超鏈接的數組)。

對於排序這個數組我知道我可以使用基數排序因此它具有這樣的結構:

arr_sorted = [(1,0.5), (1,0.01), (2,0.42), ...] 

現在我想總結了從有鑰匙1。然後所有具有陣列中的所有值重點2等應寫入到一個新的數組是這樣的:

arr_summed = [(1, 0.51), (2,0.42), ...] 

顯然,這陣會小很多,雖然依然100000個Entrys的順序。現在我的問題是:對於我在CUDA中遇到的問題,最好的並行方法是什麼?我正在使用NumbaPro。

編輯爲清楚起見

我有兩個陣列,而不是像這樣的元組的列表:

keys = [1, 2, 5, 2, 6, 4, 4, 65, 3215, 1, .....] 
values = [0.1, 0.4, 0.123, 0.01, 0.23, 0.1, 0.1, 0.4 ...] 

他們是被複制到該設備最初numpy的陣列。

我想要的是通過鍵減少它們,如果可能的話,將缺少的鍵值(例如,如果三個不出現在數組中)設置爲零。

所以我希望它去變成:

keys = [1, 2, 3, 4, 5, 6, 7, 8, ...] 
values = [0.11, 0.41, 0, 0.2, ...] # <- Summed by key 

我知道最終陣列會多大提前。

+0

你必須爲每個值項?如果沒有,你想跟蹤哪些值沒有條目,或者你想將它們設置爲默認值,比如0.0?另外,一個條目可能有零或負值嗎? –

+0

您正在討論數組中的問題,但所有代碼都顯示了元組列表。這是什麼? – talonmies

+0

我應該更精確。我沒有每個值的條目,如果可能的話,我想將那些不存在的值設置爲零。 – Escapado

回答

-1

我不知道Numba,但在簡單的Python:

arr=[(1,0.5), (4,0.2), (321, 0.01), (2, 0.042), (1, 0.01), ...] 
res = [0.0] * (indexmax + 1) 
for k, v in arr: 
    res[k] += v 
+0

不是一個答案。這個問題是特定於numbapro而不是簡單的python。除非你確定兩者相同,否則這並不成立。 – phoenix