【问题标题】:How to calculate mean of each bin after using `numpy.digitize` to split up a NumPy array?使用`numpy.digitize`拆分NumPy数组后如何计算每个bin的平均值?
【发布时间】:2019-12-03 17:32:43
【问题描述】:

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

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

np.digitize 将其拆分为垃圾箱:

>>> 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 方法是什么?

【问题讨论】:

    标签: python arrays numpy scipy scientific-computing


    【解决方案1】:

    IIUC,这是bincount

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

    输出:

    array([0.7, 1.25, 2.6])
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-12-09
        • 1970-01-01
        • 2019-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 2019-11-15
        • 2016-03-28
        相关资源
        最近更新 更多