【问题标题】:Mean of object variables in a python arraypython数组中对象变量的平均值
【发布时间】:2012-06-06 21:53:40
【问题描述】:

Python 问题。

我有一个 numpy 对象数组 (B) 的列表 (A)。我想获得 B 数组中所有对象的对象变量之一的平均值。现在,我只是在解析 B 数组,对变量求和并除以 B 中的对象数。有没有更好或更 Pythonic 的方法来做到这一点?

如果我能得到 A 列表中所有对象(即所有对象)的平均值,那就太好了

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    如果你有一个 numpy 数组,你可以调用 mean 方法:

    In [24]: import numpy as np
    
    In [25]: b = np.arange(5)
    
    In [26]: b
    Out[26]: array([0, 1, 2, 3, 4])
    
    In [27]: b.mean()
    Out[27]: 2.0
    

    如果你有一个 numpy 数组的列表,那么获取每个 numpy 的平均值就是:

    In [28]: A = [np.arange(i) for i in range(3, 6)]
    
    In [29]: A
    Out[29]: [array([0, 1, 2]), array([0, 1, 2, 3]), array([0, 1, 2, 3, 4])]
    
    In [30]: for B in A: print B.mean()
    1.0
    1.5
    2.0
    

    或者,如果您要获取所有元素的平均值(在 A 中 B 的所有元素上),请使用 sum 方法:

    In [31]: sum(B.sum() for B in A) / sum(len(B) for B in A)
    Out[31]: 1.5833333333333333
    

    【讨论】:

      【解决方案2】:

      对于对象数组,您所做的听起来不错,这确实是获得平均值的唯一方法。至于A中所有元素的平均值,只需在遍历列表时添加每个平均值,然后除以A中的对象总数

      【讨论】:

      • 您需要在遍历列表时添加每个项目,然后除以。
      【解决方案3】:

      您可以将其全部包含在列表理解中:

      [sum(x)/len(x) for x in array_list]
      

      如果你想得到所有对象的平均值,你可以这样做:

      from __future__ import division
      sums, lengths = zip(*[(sum(x),len(x)) for x in array_list])
      mean = sum(sums) / sum(lengths)
      # still can get averages for each object too
      array_averages = [s/l for s,l in zip(sums,lengths)]
      

      只是因为我第一次将列表解压缩为 zip 的语法感到困惑,快速说明:

      >>> tuples = [(1,2,'a'), (3,4,'b'), (5,6,'c'), (7,8,'d')]
      >>> print zip(*tuples)
      [(1,3,5,7), (2,4,6,8), ('a','b','c','d')]
      >>> a,b,c = zip(*tuples)
      >>> print a
      (1,3,5,7)
      >>> print c
      ('a','b','c','d')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 2021-02-07
        • 2014-05-10
        • 1970-01-01
        相关资源
        最近更新 更多