【问题标题】:How does the parameter 'a' of the numpy mean function work?numpy mean 函数的参数“a”如何工作?
【发布时间】:2017-01-26 08:36:46
【问题描述】:

我是 python 和 numpy 的新手,我无法理解 mean 函数的参数。

我这样定义我的数据。

mean = [2, 0.5]
cov = [[0.8, 0.1],[0.1, 0.5]]
np.random.seed(17)
C1 = np.random.multivariate_normal(mean, cov,50).T

现在我想近似平均值。我这样做:

C1.mean(1)
// returns array([ 1.81203223,  0.45002797])

我对这个解决方案感到困惑,因为我无法理解参数概念。

numpy.mean 状态的文档:

a : array_like 包含需要均值的数字的数组。如果一个是 不是数组,尝试转换。

对我来说,这听起来像是调用此函数的正常方式 numpy.mean(C1) 导致

(1.1310301021862881)

类似地使用不带参数的 C1 也会产生单个值。不知道为什么?

 C1.mean()    
 //returns array(1.1310301021862881)

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    这里涉及两个不同的功能:

    1. https://docs.scipy.org/doc/numpy/reference/generated/numpy.mean.html
    2. https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.mean.html

    第一个类似于np.mean(C1)。第二个像C1.mean() 一样使用并且做同样的事情。但是当你说C1.mean(1) 时,1 被用作axis 参数,它给你一个向量而不是一个标量结果。

    【讨论】:

      【解决方案2】:

      为了避免概念上的混淆,我将更改您的 mean 变量名:

      In [794]: mparam = [2, 0.5]
      In [795]: cov = [[0.8, 0.1],[0.1, 0.5]]
      In [796]: np.random.seed(17)
      In [797]: C1 = np.random.multivariate_normal(mparam, cov,50).T
      In [798]: C1.shape
      Out[798]: (2, 50)
      

      所以你的C1 数组是二维的; 2 来自mparam 的大小,50 来自normal 的第三个参数。

      method版本meandocs

      In [799]: C1.mean?
      Docstring:
      a.mean(axis=None, dtype=None, out=None, keepdims=False)
      
      Returns the average of the array elements along given axis.
      
      Refer to `numpy.mean` for full documentation.
      
      See Also
      --------
      numpy.mean : equivalent function
      Type:      builtin_function_or_method
      

      C1.mean(1) 调用它,第一个参数是1;让我们对关键字版本做同样的事情:

      In [800]: C1.mean(axis=1)
      Out[800]: array([ 1.81203223,  0.45002797])
      

      mean的函数版本相同,只是第一个参数是数组本身:

      In [801]: np.mean(C1, axis=1)
      Out[801]: array([ 1.81203223,  0.45002797])
      

      如果方法和函数之间的区别令人困惑,您需要复习一些关于类定义的 Python 基础知识。

      C.mean() 离开 axis=None,它的默认值。 np.mean 的文档提供了有关此 axis 参数的更多详细信息。如果None(即未提供),则取C1 的所有100 个值的平均值,得到一个值。对于axis=1,它取C1 每一行的平均值,因此是2 个值。

      更详细地讨论axis 参数在meansum 等函数中的含义: Sum along axis in numpy array

      【讨论】:

        猜你喜欢
        • 2014-04-14
        • 1970-01-01
        • 1970-01-01
        • 2019-03-27
        • 2014-04-27
        • 2021-11-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多