microbenchmark中cld列含义存疑:慢方法为何获靠前排名?
microbenchmark中cld列的真实含义与你的“矛盾”结果解析
cld列的本质
cld是Tukey事后多重比较检验的分组标识,核心规则:
- 标记相同字母的分组,耗时的统计均值不存在显著差异
- 标记不同字母的分组,均值存在统计学层面的显著差异
你觉得结果“矛盾”,是误解了字母对应的快慢关系:这里的字母不是按「速度从快到慢」排序,而是按「耗时均值从大到小」分配。你的结果里intmap耗时均值(1145.86)远高于List(201.37),所以标记为a;List耗时更低,标记为b——这恰恰说明intmap的耗时显著长于List(也就是更慢),和实际性能表现完全一致,只是你把字母的快慢对应搞反了。
为什么结果看起来怪异?
两个关键因素放大了这种混淆感:
- 样本量严重不足:仅设置
times=5,5次重复的统计检验稳定性极差,随机波动和异常值对结果的影响被大幅放大,参考价值很低。 - 极端异常值干扰:
List的结果里出现了一个远超其他值的异常值(999.147),直接拉高了它的均值,但即便如此,Tukey检验依然能检测出两组的显著差异,也侧面印证了intmap确实比List慢很多。
优化建议
想要得到可靠的性能对比结果:
- 大幅增加重复次数,比如设置
times=100甚至times=1000,降低随机波动的影响 - 可以先手动剔除明显的异常值,或者使用对异常值更鲁棒的统计检验方法
内容的提问来源于stack exchange,提问作者Stéphane Laurent
相关产品推荐
相关产品推荐

