Python不使用numpy如何计算标准差?自定义实现结果异常排查
问题排查
你的代码存在两处核心逻辑错误:
- 计算平方差的循环逻辑错误:第一次遍历数组元素时,就把原数组变量覆盖为单个元素的平方差值,并且直接return,后续所有代码都不会执行,这是你输出单个数值而非正确标准差的直接原因。
- 求和循环逻辑错误:即使前面的代码能执行到求和步骤,循环里的return也会在第一次累加后直接返回结果,无法完成所有平方差的求和计算。
修正后可运行代码
import math speeds = [86,87,88,86,87,85,86] def get_mean(array): sum_val = 0 for i in array: sum_val += i return sum_val / len(array) def get_std_dev(array): mean = get_mean(array) # 存储所有元素与均值的平方差 sqr_diff_list = [] for i in array: sqr_diff_list.append((i - mean) ** 2) # 计算平方差总和 sum_sqr_diff = 0 for diff in sqr_diff_list: sum_sqr_diff += diff # 按总体标准差计算,和numpy.std默认逻辑对齐 variance = sum_sqr_diff / len(array) return math.sqrt(variance) std_dev = get_std_dev(speeds) print(std_dev)
结果验证
运行修正后代码输出结果为0.9035079029052513,和你用numpy计算得到的结果一致。
内容的提问来源于stack exchange,提问作者bkleeman
相关产品推荐
相关产品推荐

