1

我正在尝试使用python计算总平方和。我知道TSS的公式是:[在此处输入图片描述][1]

我创建了一个代码来做到这一点:

from statistics import mean

x = ([3,1,3,1,3,13])

def tss(a):
    m = mean(a)
    for i in a:
        i += ((i-m)**2)
    return (i) 

print(tss(x))

问题是:它一直返回给我 94,但我知道正确答案是 102。我不知道我做错了什么。有谁能够帮我?[1]:https ://i.stack.imgur.com/Alx6r.png

4

3 回答 3

1

如果您想保留初始脚本,只需执行以下操作:

from statistics import mean

x = ([3, 1, 3, 1, 3, 13])

def tss(a):
    total = 0
    for i in a:
        total = total + ((i-mean(a))**2)
    return total
于 2021-10-02T23:32:01.060 回答
1

i每次通过循环时都会重置。因此,在最后一个循环中,您的函数会删除所有先前的总和,设置i为 13,然后将 13 与平均值之间的差的平方i(现在为 13)相加,返回 94。您需要一个不同的变量来跟踪总和,所以它不会在每个循环中丢失。你要:

from statistics import mean

x = ([3,1,3,1,3,13])

def tss(a):
    m = mean(a)
    n = 0
    for i in a:
        n += ((i-m)**2)
    return (n)

print(tss(x))
'''

@mateen's answer is more pythonic and will perform better than a loop, but I don't think you'll get the understanding from it. Welcome to python!
于 2021-10-02T23:09:14.580 回答
1

没有 numpy:

def tss(xs):
    m = sum(xs) / len(xs)
    return sum((x - m)**2 for x in xs)

使用 numpy:

import numpy as np

def tss(x):
    return ((x - np.mean(x))**2).sum()
于 2021-10-02T23:09:25.643 回答