2013-08-30 114 views
2

我想要執行以下操作。但它喜歡直方圖操作。邏輯上添加numpy

maxIndex = 6  
dst =zeros((1,6)) 
a =array([1,2,3,4,7,0,3,4,5,7]) 
index=array([1,1,1,3,3,4,4,5,5,5]) 

a的長度== index的長度,

for i in (a.size): 
    dst[index[i]] = dst[index[i]] + a[i] 

我怎樣才能做到這一點更Python。並更有效地

+0

[在Python/Numpy中一次賦值相同的數組索引](http://stackoverflow.com/questions/18273634/assigning-identical-array-indices-at-once-in-python-numpy) – Daniel

+0

1D案例剛剛問[這裏](http://stackoverflow.com/questions/18514890/array-modified-via-two-others-in-python)。 – Daniel

+0

此問題似乎屬於codereview.stackexchange.org –

回答

4

如果我理解正確的,我認爲你正在尋找numpy.bincount

dst = numpy.bincount(index, weights=a, minlength=maxIndex) 

這給我array([ 0., 6., 0., 11., 3., 16.])作爲輸出。如果您不想手動計算maxIndex,則可以省略函數調用中的minlength參數,並且numpy會爲您返回適當大小的數組。

+1

'minlength'應設置爲'maxIndex'以匹配OP的輸出。 – kennytm

+0

@KennyTM我認爲你是對的。我不確定'maxIndex'在他的問題中做了什麼。 OP可能真正需要的是缺省行爲,不帶'minlength'參數,因爲這將返回一個非零最後一個元素的數組... –

+0

非常好。這就是我想要的 – Samuel