numpy mean函数的参数'a'如何工作?

时间:2017-01-26 08:36:47

标签: python numpy

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

我这样定义了我的数据。

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)

2 个答案:

答案 0 :(得分:2)

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

  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
  3. 第一个用作np.mean(C1)。第二个像C1.mean()一样使用并做同样的事情。但是,当您说C1.mean(1)时,1被用作axis参数,它会为您提供向量而不是标量结果。

答案 1 :(得分:1)

为了避免概念上的混淆,我会更改您的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数组是2d; 2来自mparam的大小,50从第3个参数到normal

查看docs methodmean的{​​{1}}:

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.meanaxis的文档提供了有关此None参数的更多详细信息。如果C1(即未提供),它将取axis=1的所有100个值的平均值,从而得到一个值。使用C1,它取axis每行的平均值,因此为2个值。

有关meansum等函数中int* createArray() { int* arr = new int[2]; // your code return arr; } 参数含义的更详细讨论: Sum along axis in numpy array