scipy.stats.binned_statistic分箱映射逻辑及参数作用咨询
关于
stats.binned_statistic的疑问解答 先看示例代码:
rng = np.random.default_rng(seed=3576) windspeed = 8 * rng.random(500) boatspeed = .3 * windspeed**.5 + .2 * rng.random(500) bin_means, bin_edges, binnumber = stats.binned_statistic(windspeed, boatspeed, statistic='median', bins=[1,2,3,4,5,6,7])
示例中bin_means的第一个值(对应分箱[1,2)的中位数)为0.48067334,对应boatspeed数组的第90个元素(Python索引为89)。
疑问1:函数如何将分箱边缘映射到boatspeed数据?第90个元素为何属于[1,2]分箱?
- 函数核心逻辑是用第一个输入序列(windspeed)做分组依据:先遍历每个
windspeed元素,判断它落在哪个分箱区间里(默认左闭右开规则,比如bins=[1,2,3]对应的区间是[1,2)、[2,3))。 windspeed和boatspeed的元素是一一对应的,当某个windspeed元素被分到某个箱时,对应的boatspeed元素也会被划入同一个箱。- 第90个元素(索引89)对应的
windspeed[89]值必然落在[1,2)区间内,所以它对应的boatspeed元素就被归到第一个分箱,该分箱的中位数就是0.48067334。你可以直接打印windspeed[89]验证这个值的范围。
疑问2:windspeed向量的作用是什么?统计针对boatspeed为何需要它?
windspeed是分组的基准序列,这个函数的本质是「根据A序列的区间分组,计算B序列在每组的统计量」。比如实际场景中我们想分析「不同风速区间下的船速中位数」,就需要用风速(windspeed)划分区间,把对应区间的船速(boatspeed)挑出来计算统计量。如果没有windspeed,函数根本不知道该怎么对boatspeed进行分组——总不能凭空把船速分成[1,2)、[2,3)这些区间吧?
内容的提问来源于stack exchange,提问作者neverreally
相关产品推荐
相关产品推荐

