【问题标题】:Finding variance list of lists python查找列表的方差列表python
【发布时间】:2020-03-18 06:04:54
【问题描述】:

我是 python 新手,我需要帮助来查找列表列表中的平均值和方差。 我有一个这样的列表:

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9],
        [10, 11, 12]]

我想找到这样的方差输出:

[var_column_1, var_column_2, var_column_3, var_column_4]

我能够找到平均值,但对于差异,我没有找到解决方案的运气。这是我的代码:

def avg(allgroups):
    return [float(sum(i))/len(i) for i in zip(*allgroups)]
def variance(allgroups):
    summm = 0.0
    for i in zip(*allgroups):
        summm = summm + (i-avg(allgroups))**2
    return summm / (len(allgroups)-1)
    TheAvg=avg(allgroups)
    print(TheAvg)
    Variance=variance(allgroups)
    print(Variance)

我不断收到屏幕错误:

*summm = summm + (i-avg(allgroups))**2
TypeError: unsupported operand type(s) for -: 'tuple' and 'list'*

如果有任何帮助,我将不胜感激。 P/S:我不能用 numpy 来解决这个问题。

【问题讨论】:

  • 你为什么使用zip?你的群组是[1,2,3].. 还是[1,4,7,10]
  • 我的组是[1,2,3]

标签: python variance


【解决方案1】:

您可以简单地使用内置库statistics (documentation)。

import statistics

data = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]

def avg(all_groups):
    return [statistics.mean(i) for i in zip(*all_groups)]

def variance(all_groups):
    return [statistics.variance(i) for i in zip(*all_groups)]

print(avg(data))
print(variance(data))

【讨论】:

    【解决方案2】:

    您无需重新发明轮子 - statistics.variance 可以为您完成繁重的工作:

    import statistics
    
    data = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]]
    variances = [statistics.variance(l) for l in zip(*data)]
    

    【讨论】:

    • 我认为是for l in zip(*data)
    • @DaniMesejo 是的,没错 - 我误读了要求。感谢您的关注、编辑和修复。
    【解决方案3】:

    不导入统计数据的单一方法:

    def variance(allgroups):
        return [sum((x - sum(group) / len(group)) ** 2 for x in group) / (len(group) - 1) for group in zip(*allgroups)]
    

    【讨论】:

      猜你喜欢
      • 2017-11-13
      • 2013-02-08
      • 2011-01-24
      • 1970-01-01
      • 2015-07-07
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多