何时使用 numpy 与统计模块

kcw*_*w78 10 python statistics numpy

在使用一些统计分析工具时,我发现至少有 3 种 Python 方法来计算均值和标准差(不包括“自己动手”技术):

  • np.mean(), np.std()(ddof=0 或 1)
  • statistics.mean()statistics.pstdev()(和/或statistics.stdev
  • scipy.statistics 包裹

这让我摸不着头脑。应该有一种明显的方法来做到这一点,对吧?:-) 我发现了一些较旧的 SO 帖子。一个比较了np.mean()vs的性能优势statistics.mean()。它还突出了 sum 运算符的差异。那篇文章在这里: 为什么统计平均值这么慢

我正在处理numpy数组数据,我的值落在一个很小的范围内(-1.0 到 1.0,或 0.0 到 10.0),所以这些numpy函数似乎是我的应用程序的明显答案。对于我将要处理的数据,它们在速度、准确性和易于实施之间取得了良好的平衡。

看起来该statistics模块主要用于那些在列表(或其他形式)中包含数据的模块,或者用于范围广泛的模块[1e+5, 1.0, 1e-5]。这仍然是一个公平的声明吗?是否有任何numpy增强功能可以解决 sum 运算符中的差异?最近的发展是否带来了其他优势?

数值算法通常有积极和消极的方面:有些更快,或更准确,或者需要更小的内存占用。当面临 3-4 种计算方法的选择时,开发人员的责任是为他/她的应用程序选择“最佳”方法。通常,这是竞争优先级和资源之间的平衡行为。

我的目的是征求具有统计分析经验的程序员的回复,以深入了解上述方法(或其他/更好的方法)的优缺点。[我对没有支持事实的猜测或意见不感兴趣。] 我将根据我的设计要求做出自己的决定。

rlc*_*qrd 8

为什么 NumPy 重复 SciPy 的功能?

\n

来自 SciPy 常见问题解答NumPy 和 SciPy 之间有什么区别?:

\n
\n

在理想的情况下,NumPy 除了数组数据类型和最基本的操作之外什么都不包含:索引、排序、整形、基本元素函数等。所有数字代码都将驻留在 SciPy 中。然而,NumPy\xe2\x80\x99 的重要目标之一是兼容性,因此 NumPy 尝试保留其前身支持的所有功能。

\n
\n

它建议使用 SciPy 而不是 NumPy:

\n
\n

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

\n
\n

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

\n

来自统计库文档

\n
\n

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

\n
\n

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

\n

statsmodels 和 SciPy 之间有什么区别?

\n

来自 statsmodels关于页面

\n
\n

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

\n
\n

因此,您可能有 SciPy 无法满足的要求,或者可以通过专用库更好地满足。\n例如,SciPy 文档中的注释如下scipy.stats.probplot

\n
\n

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

\n
\n

因此,在这种情况下,您将需要求助于 SciPy 之外的统计库。

\n