Python 索引列表值列表上的Numpy加权平均
我试图用两个成对的列表得到平均值-索引,值 对于那些不明白我在说什么的人来说,仅仅计算项目编号似乎类似于Python 索引列表值列表上的Numpy加权平均,python,numpy,Python,Numpy,我试图用两个成对的列表得到平均值-索引,值 对于那些不明白我在说什么的人来说,仅仅计算项目编号似乎类似于np.bincount。但就我而言,取平均值而不是计数 比如说, input: i = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3] v = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] what I want: a = [10, 8.5, 6, 2.5] # 10 for average of values whose i = 0: 10 # 8.5
np.bincount
。但就我而言,取平均值而不是计数
比如说,
input:
i = [0, 1, 1, 2, 2, 2, 3, 3, 3, 3]
v = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
what I want:
a = [10, 8.5, 6, 2.5]
# 10 for average of values whose i = 0: 10
# 8.5 for average of values whose i = 1: 9, 8
# 6 for average of values whose i = 2: 7, 6, 5
# 2.5 for average of values whose i = 3: 4, 3, 2, 1
当然我知道有最简单的方法,使用FOR循环。但我的实际i和v是
numpy.ndarray
,其项目编号约为数百万。它花费了很长的时间(大约需要几分钟,但我必须反复迭代) 我刚试过一些东西,但没用。也许有人会因此而笑:P
a = np.zeros(4)
a[i] += v
a /= np.bincount(i)
# I hope that "each v" is added to a["each i"], divided each numbers
这是我最后一个不想被使用的希望,比如LOOP:
a = np.zeros(num_length, dtype=np.half)
n = np.zeros(num_length, dtype=np.int16)
for index, value in zip(i, v):
a[index] += value
n[index] += 1
a /= n
简单地说:
np.bincount(i,v)/np.bincount(i)
。哇。。。。多简单的方法啊。。。。谢谢!简单地说:np.bincount(i,v)/np.bincount(i)
。哇。。。。多简单的方法啊。。。。谢谢!