【发布时间】:2019-05-30 11:28:35
【问题描述】:
在使用一些统计分析工具时,我发现至少有 3 种 Python 方法可以计算平均值和标准差(不包括“自己动手”技术):
-
np.mean()、np.std()(ddof=0 或 1) -
statistics.mean()、statistics.pstdev()(和/或statistics.stdev) -
scipy.statistics包
这让我摸不着头脑。 应该有一种明显的方法来做到这一点,对吧? :-) 我发现了一些较旧的 SO 帖子。比较np.mean() 与statistics.mean() 的性能优势。它还突出了求和运算符的差异。那个帖子在这里:
why-is-statistics-mean-so-slow
我正在处理 numpy 数组数据,我的值在一个很小的范围内(-1.0 到 1.0,或 0.0 到 10.0),所以 numpy 函数似乎是我的应用程序的明显答案。对于我将要处理的数据,它们在速度、准确性和易于实施之间取得了很好的平衡。
看来statistics 模块主要适用于那些在列表(或其他形式)中有数据的人,或者适用于范围广泛的[1e+5, 1.0, 1e-5]。这仍然是一个公平的说法吗?是否有任何numpy 增强功能可以解决求和运算符中的差异?最近的发展是否带来任何其他优势?
数值算法通常具有积极和消极的一面:有些更快、更准确,或者需要更小的内存占用。当面临 3-4 种计算方法的选择时,开发人员的责任是为他/她的应用程序选择“最佳”方法。通常这是在竞争优先级和资源之间的平衡行为。
我的目的是征求在统计分析方面经验丰富的程序员的回复,以深入了解上述方法(或其他/更好的方法)的优缺点。 [我对没有支持事实的猜测或意见不感兴趣。]我将根据我的设计要求做出自己的决定。
【问题讨论】:
-
statistics不需要沉重的外部依赖。如果你已经在使用numpy,我想不出任何理由使用statistics。 -
What are the advantages of NumPy over regular Python lists? 的相关/可能重复项 - 这里的许多参数都是相同的。
-
这是一个相关的好东西post。
-
@jpp,谢谢。你不必说服我(关于 numpy 与列表)我已经是一个 numpy 的人。几个月前我放弃了大部分工作的清单。
-
@ayhan,我找到了那个帖子。我很好奇是否采取了任何措施来提高 np sum 函数的准确性(这显然是 statistics.mean 速度较慢但在某些情况下更准确的原因)。猜猜“小测试”是有序的——100 个数据集和 1,000 个数据点。 :-)
标签: python numpy statistics