每个垃圾箱的值

时间:2019-02-22 16:15:31

标签: python numpy matplotlib

我遇到以下问题:

hist, edges = np.histogram(data, bins=50)

如何访问每个bin的值?我想计算每个bin的平均值。

谢谢

1 个答案:

答案 0 :(得分:0)

我认为此功能可以满足您的需求:

import numpy as np

def binned_mean(values, edges):
    values = np.asarray(values)
    # Classify values into bins
    dig = np.digitize(values, edges)
    # Mask values out of bins
    m = (dig > 0) & (dig < len(edges))
    values = values[m]
    dig = dig[m] - 1
    # Binned sum of values
    nbins = len(edges) - 1
    s = np.zeros(nbins, dtype=values.dtype)
    np.add.at(s, dig, values)
    # Binned count of values
    count = np.zeros(nbins, dtype=np.int32)
    np.add.at(count, dig, 1)
    # Means
    return s / count.clip(min=1)

示例:

print(binned_mean([1.2, 1.8, 2.1, 2.4, 2.7], [1, 2, 3]))
# [1.5 2.4]

此函数中的直方图略有不同,因为np.digitize认为所有分箱都是半封闭的(右或左),而np.histogram则认为最后一条边是关闭。