2011年2月7日月曜日

fancy index を使って配列を足す

Input
(1) 繰り返しを許すインデックスの配列
   index = numpy.array([1, 2, 2])
(2) インデックス配列に対応する足したい値の配列
   weight = numpy.array([1,2,3])
(3) 足される値の配列
   value = numpy.zeros(5)


Output
(1) の回数だけ (2) を足す


Problem 
value[index] += weight
--> 最後に indexに出て来る値だけが足される
value = [0, 1, 3, 0, 0]

でも、繰り返し文足してほしい
desire:  value = [0, 1, 5, 0, 0]


Solution 
value[list(set(index))] += [sum(weight[numpy.where(index == key)]) for key in set(index)]


でも
for x in zip(index, weight):
   weight[x[0]] += x[1]
の方が計算量的にも断然はやい

0 件のコメント:

コメントを投稿