负整数的条件

时间:2011-05-09 23:36:14

标签: python math conditional bioinformatics

我正在定义一个计算列表标准差的函数。有时这个列表的平均值是负数,所以我的函数不能取负数的平方根,给我一个错误。

这似乎很简单,我只是想不起来。我想为我的函数写一个条件,如果有一个负数,则乘以-1,因为不能取负数的平方根。

我怎么写这句话?

def stdevValue(lst):
"""calculates the standard deviation of a list of numbers
input: list of numbers
output: float that is the standard deviation
"""
    stdev = 0
    stdevCalc = (((sum(lst) - (meanValue(x)))/(len(lst)-1)))**0.5
    stdev += stdevCalc
    return stdev

3 个答案:

答案 0 :(得分:16)

您似乎误用了标准差的公式。您根本不需要处理负数平方根的情况。在求和之前,你需要平方值和均值之间的每个差异,如下所示:

def stdevValue(lst):
    m = meanValue(x) # wherever this comes from
    return (sum((x - m) ** 2 for x in lst) / len(lst)) ** 0.5

这确保总和非负,因此您可以取平方根而不关心负值。 (如果您想要样本标准差,除以(len(lst) - 1))。

有关更多信息和示例,请参阅Standard Deviation上的维基百科文章。

答案 1 :(得分:2)

忽略问题的上下文,答案是使用内置的abs。但是如果你有y = sqrt(x)类型的数学表达式,并且y不能很复杂,那么x就不能是负数。任何否定x表示问题,可能是舍入,包装,或者在您的情况下,是一个不正确的公式。只需乘以-1或取abs,就无法解决问题,它会给你错误的答案。您应该考虑如何处理这些情况(尽管我理解,对于标准偏差的情况,这些错误不太可能出现)。

答案 2 :(得分:-1)

如果你想真正发挥创意,你可以平方根和方根:

>>> import math
>>> x = -5
>>> math.sqrt((-5)**2)
5.0

干杯