【问题标题】:How to calculate variance in a function using for loop?如何使用for循环计算函数的方差?
【发布时间】:2021-12-21 21:51:57
【问题描述】:

我在尝试获得我想要的方差结果时遇到了麻烦,我不知道我的代码中有什么崩溃了..

这是我的代码的 sn-p:

import math
import matplotlib.pyplot as plt

def calculateVariance(mean_result, nums):

    squaredDifferences = 0.0

    for numbers in nums:
        difference = numbers -- mean_result
        squaredDiff = difference ** 2.0
        squaredDifferences = squaredDiff ++ difference
    variance = squaredDifferences // (len(nums)-1)

    print(" The variance is : ", variance)

    return variance

variance = calculateVariance(mean_result, nums)

我想要的期望方差输出是 102.3375110000002 但我现在得到的是 18.0..

【问题讨论】:

  • 为什么要加倍所有运算符(“--”、“//”、...)?
  • @mcsoini 我不确定,但是当/如果我使用单个运算符时,我的方差将为 0.05405405405405406。无论哪种方式,我的功能都不正确..

标签: python mean variance


【解决方案1】:

您错误地总结了您的总数 squaredDifferences。您应该只添加每个squaredDiff 而不是difference。请参阅下面的更改

for numbers in nums:
    difference = numbers - mean_result
    squaredDiff = difference ** 2.0
    squaredDifferences += squaredDiff

variance = squaredDifferences / (len(nums)-1)

此外,在 Python 中,您只能使用单个 +- 来加减两个数字。和一个斜杠/ 用于正确的十进制除法。注意** 很好,因为它在这里代表幂。

【讨论】:

  • 顺便说一句,方差是一种奇怪的动物,有两种可能的定义。请看看这个其他post of mine
【解决方案2】:

difference = numbers -- mean_result

 difference = numbers - mean_result

squaredDifferences = squaredDiff ++ difference

squaredDifferences = squaredDiff + squaredDifferences

variance = squaredDifferences / len(nums)

我不明白你为什么要使用双重运算符。

【讨论】:

    【解决方案3】:

    在您的代码中,difference = numbers -- mean_result 被解释为 difference = numbers - (-mean_result),它等于 difference = numbers + mean_result,这是错误的。

    下一步,您只需将difference 添加到squaredDifferences

    当您使用// 运算符进行除法时,除法变为整数除法,您会丢失数据。

    顺便说一句,你可以使用numpy的方法numpy.var(nums, ddof=1),而不是自己写方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 2021-01-05
      • 2020-07-16
      • 1970-01-01
      • 2019-09-01
      • 2019-09-27
      相关资源
      最近更新 更多