为数字列表编写自定义求和函数

我有一个列表,我想计算它的平均值。获得平均值后,我想从列表中减去每个项目的平均值。获得所有值后,我想平方并求和。


x=[17,13,12,15,16,14,16,16,18,19]

Average is 15.6

For example list look like: x=[17,13,12,15,16,14,16,16,18,19]

第1步:


Find average value

sum(x)/len(x) 

average value is 15.6

第 2 步:从列表中减去每个项目的平均值


17-15.6  =  1.4

13-15.6  = -2.6

12-15.6  = -3.6

15-15.6  = -0.6

16-15.6  =  0.4

14-15.6  = -1.6

16-15.6  =  0.4

16-15.6  =  0.4

18-15.6  =  2.4

19-15.6  =  3.4

第 3 步:之后我想应用每个结果的平方


1.4   * 1.4    = 1.96

-2.6  * -2.6   = 6.76

-3.6  * -3.6   = 12.96

-0.6  * -0.6   = 0.36

0.4   * 0.4    = 0.16

-1.6  * -1.6   = 2.56

0.4   * 0.4    = 0.16

0.4   * 0.4    = 0.16

2.4   * 2.4    = 5.76

3.4   * 3.4    = 11.56

第 4 步:之后我想对平方求和


1.96 + 6.76 + 12.96 0.36 +0.16 + 2.56 + 0.16 + 0.16 + 5.76 + 11.56 = 42.4

我尝试了这种方法,我能够达到第 3 步


def sumx(x):

    for i in x:                        #

        result=i-sum(x)/len(x)         #

        result=result*result           #

        #result="{:.2f}".format(result)

        print("{:.2f}".format(result))

        total=0

        for i in result:

            total +=i

    return (total)

sumx(x)

错误信息


结果 i 的错误消息:TypeError: 'float' object is not iterable


所需的输出为 42.4


开满天机
浏览 206回答 3
3回答

catspeake

您可以使用numpy并列出理解:import numpy as npx=[17,13,12,15,16,14,16,16,18,19]# using mean function from numpysum((y - np.mean(x))**2 for y in x) # 42.4# calculating mean on our own (pure python)sum((y - (sum(x)/float(len(x))))**2 for y in x) # 42.4# function to calculate ssedef sse(x):    m = np.mean(x)    return sum((y - m)**2 for y in x)

繁华开满天机

您可以使用numpy和矢量化计算:import numpy as npx = np.array([17,13,12,15,16,14,16,16,18,19])normalized_vector = x - np.mean(x)result = np.dot(normalized_vector, normalized_vector)...因为点积等于元素的平方和。更简洁:result = np.var(x) * x.size...计算n倍方差,这应该等于你想要的。

慕莱坞森

你的错误在这里:total=0for i in result:    total +=i这里的结果只是一个数字而不是一个列表。因此整个代码都写错了。相反,您可以在函数的起始位置初始化 total 并摆脱 for 循环。这是一个简单的代码:x = [17,13,12,15,16,14,16,16,18,19]average = sum (x) / float (len (x))total = 0for number in x:    result = pow ((number - average), 2)    total += resultprint total如果你想把它作为一个函数:x = [17,13,12,15,16,14,16,16,18,19]def sumx(x):    average = sum (x) / float (len (x))    total = 0    for i in x:                                result = i - average        result = result * result                   total += result    return (total)print sumx(x)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python