如何通过for循环在函数中计算方差?代码计算方差结果异常的排查求助
帮你修复方差计算代码的问题
我帮你找出代码里的几个关键错误,这就是你得不到期望结果的原因:
错误点分析
- 错误的运算符使用:Python里没有
--和++这类自增自减运算符。你写的numbers -- mean_result会被解析成numbers - (-mean_result),也就是numbers + mean_result,完全偏离了“计算数值与均值差值”的逻辑;而squaredDifferences = squaredDiff ++ difference同样错误,这里你需要累加的是每个数值的平方差,不是平方差加原始差值。 - 错误的累加逻辑:当前代码没有正确累加所有平方差,而是每次用当前平方差加差值覆盖总和,正确的做法是把每个平方差逐步加到总和里。
- 整数除法导致精度丢失:
//是Python的整数除法运算符,会直接截断小数部分,而方差是浮点数结果,应该用普通除法/。
修正后的代码
import math import matplotlib.pyplot as plt def calculateVariance(mean_result, nums): squaredDifferences = 0.0 for number in nums: # 变量名改成number更贴合单个元素的含义 difference = number - mean_result # 修正减法运算符 squaredDiff = difference ** 2.0 squaredDifferences += squaredDiff # 正确累加平方差总和 # 用普通除法计算样本方差(除以n-1) variance = squaredDifferences / (len(nums)-1) print("The variance is : ", variance) return variance # 传入你已计算好的mean_result和nums即可 # variance = calculateVariance(mean_result, nums)
修改后运行代码,应该就能得到你期望的102.3375110000002这个结果了。
内容的提问来源于stack exchange,提问作者Orianna Sanele
相关产品推荐
相关产品推荐

