使用“numpy.digitize”拆分 NumPy 数组后如何计算每个 bin 的平均值?

How to calculate mean of each bin after using `numpy.digitize` to split up a NumPy array?

我有一个输入数组,它被分成多个箱子,我想计算这些箱子的平均值。让我们假设以下示例:

>>> import numpy as np
>>> a = np.array([1.4, 2.6, 0.7, 1.1])

np.digitize

将其分成 bin
>>> bins = np.arange(0, 2 + 1)
>>> indices = np.digitize(a, bins)
>>> indices
array([2, 3, 1, 2])

这完全符合我的预期,您可以在此处更明确地看到:

>>> for i in range(len(bins)):
...     f"bin where {i} <= x < {i + 1} contains {a[indices == i + 1]}"
... 
'bin where 0 <= x < 1 contains [0.7]'
'bin where 1 <= x < 2 contains [1.4 1.1]'
'bin where 2 <= x < 3 contains [2.6]'

但是,现在我想获取每个 bin 的平均值。使用 for 循环以非 NumPy 方式执行此操作将如下所示:

>>> b = np.array([a[indices == i + 1].mean() for i in range(len(bins))])
>>> b
array([0.7 , 1.25, 2.6 ])

但是为此使用 for 循环看起来既不优雅(pythonic)也不高效,因为之后必须使用 np.array 将列表转换为 NumPy 数组。

NumPy 的方法是什么?

执行此操作的 numpy 方法是 numpy.mean() 作为函数

IIUC,这是bincount:

np.bincount(indices-1,a)/np.bincount(indices-1)

输出:

array([0.7, 1.25, 2.6])