我需要帮助在不使用 importmath、python 的情况下获取 stdev
Posted
技术标签:
【中文标题】我需要帮助在不使用 importmath、python 的情况下获取 stdev【英文标题】:i need help getting stDev without using importmath, python 【发布时间】: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
【参考方案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.以上是关于我需要帮助在不使用 importmath、python 的情况下获取 stdev的主要内容,如果未能解决你的问题,请参考以下文章