我有三个数组
import numpy as np
value = np.array ([1, 3, 3, 5, 5, 7, 3])
index = np.array ([1, 1, 3, 3, 6, 6, 6])
data = np.array ([1, 2, 3, 4, 5, 6])
阵列“索引”& “值”具有相同的大小,我想通过取平均值将项目分组为“值”。例如:对于前两个项目[1,3,... in“value”,在“index”中具有相同的键1,因此对于最终数组,该值是第一个和第一个的平均值。第2项价值:(1 + 3)/ 2等于2
最后一个数组是:
[2, nan, 4, nan, nan, 5]
第一个值是“值”的第1和第2的平均值
第二个值是nan,因为“index”中没有任何键(数组索引中没有“2”)
第三个值是“值”的第3个和第4个的平均值
...
感谢您的帮助!!!
此致 罗伊
答案 0 :(得分:3)
>>> [value[index==i].mean() for i in data]
[2.0, nan, 4.0, nan, nan, 5.0]
答案 1 :(得分:3)
也许您想使用numpy.bincount()
?
value = np.array([1, 3, 3, 5, 5, 7, 3])
index = np.array([1, 1, 3, 3, 6, 6, 6])
np.bincount(index, value) / np.bincount(index)
# array([ NaN, 2., NaN, 4., NaN, NaN, 5.])
答案 2 :(得分:0)
这是您正在寻找的一般想法吗?
import numpy as np
value = np.array ([1, 3, 3, 5, 5, 7, 3])
index = np.array ([1, 1, 3, 3, 6, 6, 6])
data = np.array ([1, 2, 3, 4, 5, 6])
answer = np.array(data, dtype=float)
for i, e in enumerate(data):
idx = np.where(index==e)[0]
val = value[idx]
answer[i] = np.mean(val)
print answer # [ 2. nan 4. nan nan 5.]
如果您的data
数组非常大,可能会有更好的解决方案。
答案 3 :(得分:0)
我搜索了使用numpy直方图来解决巨大的数组:
value = np.array([1,3,3,5,5,7,3],dtype ='float')
index = np.array([1,1,3,3,6,6,6],dtype ='float')
data = np.array([1,2,3,4,5,6])
sums = np.histogram(index,
bins = np.arange(index.min(),index.max()+ 2),
权重=值)[0]
counter = np.histogram(index,
bins = np.arange(index.min(),index.max()+ 2))[0]
sums / counter
阵列([2.,NaN,4.,NaN,NaN,5。])