Python 在列表列表中查找每个列表的标准偏差
如何修改此代码:Python 在列表列表中查找每个列表的标准偏差,python,python-2.x,Python,Python 2.x,如何修改此代码: def SD(numList): cntN=len(numList) sumN=0 for i in numList: sumN+=i avgVal=float(sumN)/float(cntN) sumVar=0.0 for i in range(cntN): sumVar+=float((numList[i]-avgVal)**2) return ((float(sumVar)/floa
def SD(numList):
cntN=len(numList)
sumN=0
for i in numList:
sumN+=i
avgVal=float(sumN)/float(cntN)
sumVar=0.0
for i in range(cntN):
sumVar+=float((numList[i]-avgVal)**2)
return ((float(sumVar)/float((cntN-1)))**0.5)
如果numList是一个列表列表,我想找出每一行的标准偏差,那么它就可以工作了?
感谢您提供的任何帮助不要修改代码,更容易理解列表:
def SD(numLists):
def singleSD(numList):
cntN=len(numList)
sumN=0
for i in numList:
sumN+=i
avgVal=float(sumN)/float(cntN)
sumVar=0.0
for i in range(cntN):
sumVar+=float((numList[i]-avgVal)**2)
return ((float(sumVar)/float((cntN-1)))**0.5)
return [singleSD(l) for l in numLists]
[SD(nl) for nl in numLists]
此外,您的SD
功能可以使用列表理解简化为:
def SD(numList):
cntN = len(numList)
avgVal = float(sum(numList))/cntN
return (sum((i-avgVal)**2 for i in numList)/(cntN-1))**0.5
你也有很多冗余的
Float
,这正是列表理解和map
函数的作用:将一些表达式或函数(分别)应用到序列中的每个元素,并将结果放入一个新的列表中;最好编写一个没有任何无关内容的精简示例(例如,给定一个只返回列表长度的单行函数,如何更改它以返回列表中每个列表的长度)?而且绝对不要为没有问题的东西添加标记。我经常遇到这样的错误:TypeError:不支持的操作数类型/:“generator”和“float”
关于如何修复它的任何想法?现在修复。我在返回中丢失了一个参数。当我按你的方式尝试时,我得到了一个类似的错误(sumVar+=((I-avgVal)代表a中的I)**2类型错误:不支持**或pow()的操作数类型:'generator'和'int'
)这是因为((I-avgVal)代表a中的I)
是你所写语句中的生成器表达式。尝试sumVar=sum((i-avgVal)**2表示A中的i)
。是否有一种简单的方法只使用列表中的正数?sumVar=sum((i-avgVal)**2表示A中的i,如果i>=0)