繁花如伊
我认为此功能可以满足您的需求:import numpy as npdef 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认为所有 bin 都是半封闭的(右侧或左侧),与np.histogram认为最后一个边缘是闭合的不同。