如何为scipy的binned_statistic_2d正确定义自定义函数?
解决scipy.binned_statistic_2d自定义统计函数的报错问题
你遇到的报错核心原因是:使用自定义统计函数时,不能将values参数设为None。
scipy内置的'count'是特殊逻辑,允许values为空,直接统计每个bin内的样本点数量;而自定义函数会触发源码中的长度检查,要求values的长度必须和x、y数组的长度一致。
正确实现方式
要复现count的功能,需要给values传入一个和x/y同长度的数组(比如直接传入x、y,或者全1数组),然后在自定义函数中统计传入数组的元素数量:
from scipy import stats import numpy as np def custom_count(values): # 用np.size适配numpy数组,len(values)也可正常工作 return np.size(values) x = [0.1, 0.1, 0.1, 0.6] y = [2.1, 2.6, 2.1, 2.1] binx = [0.0, 0.5, 1.0] biny = [2.0, 2.5, 3.0] # 传入values参数,这里直接用x即可,长度和x、y一致 ret = stats.binned_statistic_2d(x, y, values=x, statistic=custom_count, bins=[binx, biny]) # 输出结果和内置count完全一致 print(ret.statistic)
原理说明
自定义统计函数的输入是每个bin内对应的values子集(一维数组),输出单个统计量。当你传入values=x后,每个bin会收到该bin内所有x的取值,我们统计这个子集的元素数量就等同于样本点的计数。
内容的提问来源于stack exchange,提问作者gammapoint
相关产品推荐
相关产品推荐

