关于average()运算组合特性的技术疑问
关于average()运算组合特性的技术疑问
你提的这个问题抓得非常准——求平均值的操作确实不具备无条件的组合性,核心原因就是它对每个数值的「出现次数(权重)」极度敏感,下面分两部分拆解这个特性:
平均值对数值的出现次数敏感
拿你举的二元例子来说:加权平均公式(ma + nb)/(m + n)和简单平均(a + b)/2并不总是相等。只有当两个数值的出现次数(也就是m和n)完全相同时,这两个结果才会一致;只要m≠n,加权平均就会偏向出现次数更多的那个数值。比如m=3、n=1,a=2、b=6时,加权平均是(3*2 + 1*6)/(3+1)=3,而简单平均是(2+6)/2=4,差异很明显。平均值的组合仅在子组规模相等时成立
你把这个特性转化为函数组合的表述也很到位:如果把avg()看作一个求平均的函数,那么avg(avg(a₁,...,aₘ), avg(b₁,...,bₙ))并不一定等于avg(a₁,...,aₘ,b₁,...,bₙ)。
前者是先分别算出两个子组的平均值,再对这两个平均值做简单平均——相当于给每个子组的平均值赋予了相同的权重(各占50%);而后者是把所有个体放在一起平等计算,每个个体的权重都是1/(m+n)。只有当两个子组的规模m=n时,这两种权重分配才等价,结果才会一致;如果m≠n,两种计算方式的权重逻辑完全不同,结果自然就不一样了。
备注:内容来源于stack exchange,提问作者iuerlhgw
相关产品推荐
相关产品推荐

