Python Numpy优化了在其他数组给定的索引上计算数组的均值

如何使用另一个数组的x索引计算numpy数组y的平均值?

import numpy
x = numpy.array([100, 100, 20000, 20000, 100, 13, 100, numpy.nan])
y = numpy.array([10, 20, 30, 40, numpy.nan, 50, 60, 70])

预期结果:

结果['13'] :( 50)/ 1

结果['100'] :( 10 + 20 + 60)/ 3

结果['20000']:(30 + 40)/ 2

以下代码有效,但由于实际数据集的大小,效率不高:

result = {}
unique = numpy.unique(x[~numpy.isnan(x)]).astype(int)
for elem in unique:
    pos = numpy.where(x == elem)
    avg = numpy.nanmean(y[pos])
    result[elem]=avg
print(result)

我已经阅读了有关numpy.bincount的信息,但无法使用它。

评论
  • Jane
    Jane 回复

    这是使用bincount的方法:

    >>> nn=~(np.isnan(x)|np.isnan(y))
    >>> xr,yr = x[nn],y[nn]
    >>> unq,idx,cnt=np.unique(xr,return_inverse=True,return_counts=True)
    >>> dict(zip(unq,np.bincount(idx,yr)/cnt))
    {13.0: 50.0, 100.0: 30.0, 20000.0: 35.0}