【问题标题】:Computing Standard Deviation without packages in Python?在 Python 中计算没有包的标准偏差?
【发布时间】:2014-07-24 07:20:36
【问题描述】:

我试图弄清楚如何创建一个脚本来计算文件的标准偏差。例如,假设我 DLed 一个带有值列表的 csv。我想通过运行 python 程序找到这些值的 SD。我们这里没有使用 numpy!

【问题讨论】:

  • 那么你到底卡在哪里了?公式很简单。

标签: python-3.x statistics opencsv standard-deviation


【解决方案1】:

如果允许使用标准库,

import math

xs = [0.5,0.7,0.3,0.2]     # values (must be floats!)
mean = sum(xs) / len(xs)   # mean
var  = sum(pow(x-mean,2) for x in xs) / len(xs)  # variance
std  = math.sqrt(var)  # standard deviation

如果不是,您需要手动估算sqrt。例如,您可以使用二分搜索或Newton's Method。这是wikipedia page 的方法

【讨论】:

  • 啊,很好,因为我正在导入数据,这在某种意义上说是乱七八糟的,因为它不是在一个直接的列表中给我的。它有逗号、空格和其他我不关心的数字。我只对一栏感兴趣。我必须对其进行更改,使其成为我们可以轻松执行您编写的功能的最佳列表。弄清楚如何导入它一直是一场斗争
【解决方案2】:

在 Python 3.4 及以上版本中,有一个名为 statistics 的包,具有 standard deviation (pstdev) 和其他功能

以下是如何使用它的示例:

import statistics

data = [1, 1, 2.5, 6.5, 7.3, 8, 9.2]

print(statistics.pstdev(data))
# 3.2159043543498815

【讨论】:

    【解决方案3】:
    filename = "C:\Users\mmb0368\Desktop\input.txt"
    file = open("C:\Users\mmb0368\Desktop\input.txt","rb")
    
    n = file.readlines()
    
    num_list = map(lambda n: n.rstrip("\n"), n)
    num_list = [int(x) for x in num_list]
    mean = sum(num_list)/len(num_list)
    print mean, max(num_list), min(num_list)
    
    for snDev in num_list:
    
        snDev = mean**(1.0/2)
    print snDev
    

    【讨论】:

      【解决方案4】:
       from math import sqrt
       n= [11, 8, 8, 3, 4, 4, 5, 6, 6, 7, 8] 
      
       mean =sum(n)/len(n)
       SUM= 0
       for i in n :
           SUM +=(i-mean)**2
      
      
      
       stdeV = sqrt(SUM/(len(n)-1)) 
       print(stdeV)
      

      【讨论】:

        猜你喜欢
        • 2017-09-26
        • 1970-01-01
        • 1970-01-01
        • 2022-01-23
        • 2014-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-20
        相关资源
        最近更新 更多