【问题标题】:when to use numpy vs statistics modules何时使用 numpy 与统计模块
【发布时间】: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


【解决方案1】:

为什么 NumPy 会重复 SciPy 的功能?

来自 SciPy 常见问题解答What is the difference between NumPy and SciPy?

在理想情况下,NumPy 只包含数组数据类型和最基本的操作:索引、排序、重塑、基本元素函数等。所有数字代码都将驻留在 SciPy 中。然而,NumPy 的一个重要目标是兼容性,因此 NumPy 试图保留其前任所支持的所有功能。

它建议使用 SciPy 而不是 NumPy:

无论如何,SciPy 包含功能更全面的线性代数模块版本,以及许多其他数值算法。如果您使用 Python 进行科学计算,您可能应该同时安装 NumPy 和 SciPy。大多数新功能属于 SciPy 而不是 NumPy。

我应该什么时候使用统计库?

来自统计库documentation

该模块无意与第三方库(例如 NumPy、SciPy)或针对专业统计学家(例如 Minitab、SAS 和 Matlab)的专有全功能统计软件包竞争。它针对的是图形和科学计算器的水平。

因此,我不会将它用于严重(即资源密集型)计算。

statsmodels 和 SciPy 有什么区别?

来自 statsmodels about page

scipy.stats 的模型模块最初是由 Jonathan Taylor 编写的。有一段时间它是 scipy 的一部分,但后来被删除了。在 2009 年 Google Summer of Code 期间,statsmodels 被更正、测试、改进并作为新包发布。此后,statsmodels 开发团队不断添加新模型、绘图工具和统计方法。

因此,您可能有一个 SciPy 无法满足的要求,或者由专用库更好地满足。 例如,scipy.stats.probplot 的 SciPy 文档指出

Statsmodels 具有这种类型的更广泛的功能,请参阅statsmodels.api.ProbPlot

因此,在此类情况下,您将需要转向 SciPy 以外的统计库。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2014-05-21
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 2011-10-29
    相关资源
    最近更新 更多