【问题标题】:Calculate mean across dimension in a 2D array计算二维数组中跨维度的平均值
【发布时间】:2013-03-27 01:05:06
【问题描述】:

我有一个这样的数组a

a = [[40, 10], [50, 11]]

我需要分别计算每个维度的平均值,结果应该是这样的:

[45, 10.5]

45a[*][0] 的平均值,10.5a[*][1] 的平均值。

不使用循环解决这个问题的最优雅的方法是什么?

【问题讨论】:

    标签: python arrays multidimensional-array numpy mean


    【解决方案1】:

    a.mean() 接受 axis 参数:

    In [1]: import numpy as np
    
    In [2]: a = np.array([[40, 10], [50, 11]])
    
    In [3]: a.mean(axis=1)     # to take the mean of each row
    Out[3]: array([ 25. ,  30.5])
    
    In [4]: a.mean(axis=0)     # to take the mean of each col
    Out[4]: array([ 45. ,  10.5])
    

    或者,作为一个独立的函数:

    In [5]: np.mean(a, axis=1)
    Out[5]: array([ 25. ,  30.5])
    

    您的切片不起作用的原因是因为这是切片的语法:

    In [6]: a[:,0].mean() # first column
    Out[6]: 45.0
    
    In [7]: a[:,1].mean() # second column
    Out[7]: 10.5
    

    【讨论】:

    • 感谢您的快速回复。 In [n]: 是什么意思?是这部分代码吗?
    • 我使用的是 numpy,所以第 2 行和第 3 行效果很好,但使用 axis=0 而不是 axis=1
    • @otmezger axis=0 在下一行。我编辑显示更多信息,刷新,也许?
    • @otmezger 不客气。请注意,许多 numpy 数组方法都采用这样的轴参数。
    • @askewchan: mean = np.mean(a, axis=(0,2,3)) mean? knowing that input tensor (a) is shape (batch,channel,width,height) 是什么意思?
    【解决方案2】:

    这是一个非 numpy 的解决方案:

    >>> a = [[40, 10], [50, 11]]
    >>> [float(sum(l))/len(l) for l in zip(*a)]
    [45.0, 10.5]
    

    【讨论】:

      【解决方案3】:

      如果您经常这样做,NumPy 是您的最佳选择。

      如果由于某种原因你不能使用 NumPy:

      >>> map(lambda x:sum(x)/float(len(x)), zip(*a))
      [45.0, 10.5]
      

      【讨论】:

        猜你喜欢
        • 2019-10-27
        • 2016-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多