【问题标题】:i need help getting stDev without using importmath, python我需要帮助在不使用 importmath、python 的情况下获取 stdev
【发布时间】:2019-04-26 08:54:14
【问题描述】:
### import math

def mean(values):
    return sum(values)*1.0/len(values)

    def std():
        pass
    print(std())

    def std(values):
            length = len(values)
        if length < 2:
            return("Standard deviation requires at least two data points")
        m = mean(values)
        total_sum = 0
        for i in range(length):
            total_sum += (values[i]-m)**2
        under_root = total_sum*1.0/length
        return math.sqrt(under_root) 

    vals = [5]
    stan_dev = std(vals)
    print(stan_dev)

    values = [1, 2, 3, 4, 5]
    stan_dev = std(values)

    print(stan_dev)

__________________________________________________________________________


lst = [3, 19, 21, 1435, 653342]

sum = reduce((lambda x, y: x +y), lst)
print (sum) 

# list = [3, 19, 21, 1435, 653342]

我需要能够在不使用 sum 或 len 的情况下获得 stDev 我需要“解压”stDev ???

【问题讨论】:

  • 您能否添加更多详细信息,说明您想要实现的目标、所需的输出等以及更正问题中的代码格式?
  • 要计算标准偏差,您需要提取平方根。在 Python 中,sqrt 函数位于 math 模块中。如果您坚持这样做而不导入math,那么您将不得不编写自己的平方根函数。当您真正想要的只是标准偏差时,这有点高。
  • 您可以获得 1/2 次方的平方根(因此无需数学导入)。
  • 我可以使用数学中的平方根,只需要得到 sum 和 Length,而不使用 Len 来得到平均值,然后得到 st dev

标签: python function unpack


【解决方案1】:

你可以用两个循环来做(有更短的方法,但这很简单):

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# Calculate the mean first
N, X = 0, 0
for xi in arr:
    N += 1
    X += xi
mean = X/N

# Calculate the standard deviation
DSS = 0
for xi in arr:
    DSS += (xi - mean)**2
std = (DSS/N)**(1/2)

mean 输出4.5,为std 输出2.872

【讨论】:

  • 对于 [1,2,3,4,5] 的列表,当我将这些数字代入这个公式时,std 应该是 1.58,我得到 0.89,平均值正好在 3
  • 数组 [1,2,3,4,5] 的标准偏差是 1.4142(我用 numpy 检查过),这就是上面的代码正确输出的结果。这可能取决于您所需的标准偏差公式(除以 N-1 而不是 N),在这种情况下,标准公式应为 std = (DSS/(N-1))**(1/2)Here is a sandbox with the code running - proving it gives the correct answer.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
相关资源
最近更新 更多