np.average()和np.mean()

时间:2016-07-08 16:23:40

标签: numpy statistics

NumPy有两种不同的函数来计算平均值:

np.average()

np.mean()

由于NumPy不太可能包含冗余功能,因此必须具有细微差别。

这是一个在Python开始数据分析时我不太清楚的概念所以我决定在这里做一个详细的自我答案,因为我相信其他人正在努力解决它。

1 个答案:

答案 0 :(得分:3)

简答

' 平均数'和' 平均'是两件不同的事情。人们互换使用它们但不应该。 np.mean()为您提供算术平均值,其中 np.average()允许您获取算术平均值,如果您不添加其他参数,但也可用于加权平均值。

长答案和背景

<强>统计:

由于NumPy主要用于处理数据集,因此了解导致这种混淆的数学概念非常重要。在简单的数学和日常生活中,当不是这种情况时,我们使用“strong>平均值”和“平均值这两个词作为可互换词。

  • 平均值:通常指的是算术平均值&#39;或一组数字的总和除以集合中的数字 1
  • 平均值:平均值可以参考许多不同的计算,其算术平均值为&#39;是一个。其他包括&#39; Median&#39;&#39; Mode&#39;,&#39; Weighted Mean,&#39; Interquartile Mean&#39;和许多其他人。2

这对NumPy意味着什么:

回到手头的话题。由于NumPy通常用于与数学相关的应用程序,因此平均值()和平均值()之间的差异要比使用平均值()作为查找“算术平均值”的函数的Excel这样的工具更精确一些。 #39;

<强> np.mean()

在NumPy中,np.mean()将允许您计算算术平均值&#39;跨越指定的轴。

以下是您将如何使用它:

myArray = np.array([[3, 4], [5, 6]])
np.mean(myArray)

还有一些参数可以改变使用哪个dType以及函数应该沿哪个轴计算(默认为扁平数组)。

<强> np.average()

另一方面,

np.average()允许你采取“加权平均值”。其中数组中的不同数字可能具有不同的权重。例如,在文档中我们可以看到:

>>> data = range(1,5)
>>> data
[1, 2, 3, 4]
>>> np.average(data)
2.5
>>> np.average(range(1,11), weights=range(10,0,-1))
4.0

对于最后一个函数,如果你采用非加权平均值,你会希望答案为6.但是,它最终为4,因为我们也应用了权重。

如果你没有很好地处理加权意味着&#39;我们可以尝试简化它:

考虑这是我们的加权平均值的基本摘要。它不会在数学上非常准确(我希望有人会纠正),但它应该让你能够看到我们正在讨论的内容。

平均值是所有数字的平均值,并除以总数。这意味着它们都具有相同的重量,或者被计算一次。对于我们的平均样本,这意味着:

(1+2+3+4+5+6+7+8+9+10+11)/11 = 6

加权平均值包括包含不同权重的数字。因为在上面的示例中它不包含整数,所以可视化可能有点令人困惑,所以我们可以想象加权在数字上更合适,它看起来像这样:

(1+1+1+1+1+1+1+1+1+1+1+2+2+2+2+2+2+2+2+2+3+3+3+3+3+3+3+3+4+4+4+4+4+4+4+5+5+5+5+5+5+6+6+6+6+6+6+7+7+7+7+7+8+8+8+8+9+9+9+-11)/59 = 3.9~

即使在实际的数字集中,只有一个数字1的实例,我们计算它的正常重量的10倍。这也可以通过其他方式完成,我们可以将其数量计算为正常体重的1/3。

如果你没有为np.average()提供一个权重参数,它只会给你在展平轴上的等重加权平均值,相当于np.mean()。

为什么我会使用np.mean()?

如果np.average()可用于查找平算算术平均值,那么您可能会问自己&#34;为什么我会使用np.mean()?&#34; np.mean()允许一些np.average()没有的有用参数。其中一个关键是 dType 参数,它允许您设置计算中使用的类型。

例如,NumPy文档给出了我们这个案例:

Single point precision: 
>>> a = np.zeros((2, 512*512), dtype=np.float32)
>>> a[0, :] = 1.0
>>> a[1, :] = 0.1
>>> np.mean(a)
0.546875 

根据上面的计算,我们的平均值看起来像是 0.546875 ,但如果我们使用d64参数到float64,我们会得到不同的结果:

>>> np.mean(a, dtype=np.float64)
0.55000000074505806

实际平均值 0.55000000074505806

现在,如果你将这两个数字四舍五入到两位有效数字,那么在这两种情况下你得到0.55。如果你对这个数字进行多组操作仍然很重要,特别是当处理需要高精度的非常大(或非常小的数字)时。

例如:

<(>(((0.55000000074505806 * 184.6651)^ 5)+0.666321)/46.778)= 231,044,65的 6 0.404611

<(>(((0.55000000074505806 * 184.6651)^ 5)+0.666321)/46.778)= 231,044,65的 4 0.839687

即使在更简单的公式中,您最终可能会被小数点后几位,这可能与以下内容相关:

  • 科学模拟:由于方程冗长,需要多个步骤和高精度。
  • 统计:几个百分点的准确性之间的差异可能是至关重要的(例如在医学研究中)。
  • 财务方面:在大型金融模式中持续减少几美分,或追踪大量资金(银行/私募股权)可能会在年底前导致数十万美元的错误。

重要的词语区分 最后,根据解释,您可能会发现自己处于分析数据的情况,在这种情况下,要求您找到“平均值&#39;一个数据集。您可能希望使用不同的平均方法来查找数据集的最准确表示。例如,在具有异常值的情况下,np.median()可能比np.average()更准确,因此了解统计差异非常重要。