常见问题解答

什么是 SciPy?#

SciPy 是一个用于 Python 的开源(BSD 许可)科学和数值工具集。它目前支持特殊函数、积分、常微分方程 (ODE) 求解器、梯度优化、并行编程工具、用于快速执行的表达式到 C++ 编译器等。一个好的经验法则是,如果它在数值计算的通用教科书(例如,著名的 Numerical Recipes 系列)中有所介绍,那么它可能在 SciPy 中实现。

它多少钱?#

SciPy 是免费提供的。它作为开源软件发布,这意味着您可以完全访问源代码,并可以以其宽松的 BSD 许可允许的任何方式使用它。

SciPy 的许可条款是什么?#

SciPy 的许可证根据 BSD 许可证的条款,可免费用于商业和非商业用途 此处

如果 SciPy 是用 Python 这样的解释型语言编写的,它怎么能很快?#

实际上,时间关键的循环通常是用 C、C++ 或 Fortran 实现的。SciPy 的一部分是建立在 https://www.netlib.org/ 上免费提供的科学例程之上的薄层代码。Netlib 是一个巨大的存储库,其中包含用 C 和 Fortran 编写的极其宝贵且健壮的科学算法。重新编写这些算法将是愚蠢的,并且需要数年时间才能调试它们。SciPy 使用各种方法来生成围绕这些算法的“包装器”,以便它们可以在 Python 中使用。一些包装器是通过用 C 手动编码生成的。其余部分是使用 SWIG 或 f2py 生成的。SciPy 的一些较新的贡献要么完全是用 CythonPythran 编写的,要么是用它们包装的。

第二个答案是,对于困难的问题,更好的算法可以极大地缩短解决问题所需的时间。因此,使用 SciPy 的内置算法可能比用 C 编写的简单算法快得多。

我发现了一个错误。我该怎么办?#

SciPy 开发团队努力使 SciPy 尽可能可靠,但与任何软件产品一样,错误确实会发生。如果您发现影响您软件的错误,请通过在 SciPy 错误跟踪器 中提交工单来告诉我们。

我如何参与 SciPy?#

前往我们的 社区 页面。我们热衷于更多人参与编写代码、测试、文档以及帮助网站。

是否有商业支持可用?#

是的,许多公司为 SciPy 提供商业支持,例如 AnacondaEnthoughtQuansight

NumPy 与 SciPy 与其他包#

NumPy 和 SciPy 之间的区别是什么?#

在理想情况下,NumPy 只包含数组数据类型和最基本的操作:索引、排序、重塑、基本逐元素函数等。所有数值代码都应该位于 SciPy 中。但是,NumPy 的重要目标之一是兼容性,因此 NumPy 尝试保留其任一前身支持的所有功能。因此,NumPy 包含一些线性代数函数和傅里叶变换,即使这些函数更适合放在 SciPy 中。无论如何,SciPy 包含更完整版本的线性代数模块,以及许多其他数值算法。如果您使用 Python 进行科学计算,您可能应该同时安装 NumPy 和 SciPy。大多数新功能都属于 SciPy 而不是 NumPy。

我如何使用 SciPy 绘制图表?#

SciPy 的功能不包括绘图功能,它专注于数值对象和算法。有几个包与 SciPy 紧密集成,可以生成高质量的绘图,例如非常流行的 Matplotlib。其他流行的选择包括 BokehPlotlyAltair

如何使用 SciPy 制作 3D 图表/可视化?#

与 2D 绘图一样,3D 图形也不在 SciPy 的范围内,但与 2D 情况一样,也存在与 SciPy 集成的包。 Matplotlibmplot3d 子包中提供基本的 3D 绘图,而 Mayavi 提供广泛的高质量 3D 可视化功能,利用强大的 VTK 引擎。

为什么同时有 numpy.linalgscipy.linalg?它们有什么区别?#

scipy.linalg 是使用 f2py 对 Fortran LAPACK 的更完整封装。

NumPy 的设计目标之一是使其无需 Fortran 编译器即可构建,如果没有 LAPACK 可用,NumPy 将使用自己的实现。SciPy 需要 Fortran 编译器才能构建,并且严重依赖于封装的 Fortran 代码。

NumPy 和 SciPy 中的 linalg 模块有一些共同的功能,但具有不同的文档字符串,并且 scipy.linalg 包含 numpy.linalg 中没有的功能,例如与 LU 分解Schur 分解 相关的函数,计算伪逆的多种方法,以及矩阵超越函数,例如 矩阵对数。一些在两者中都存在的功能在 scipy.linalg 中具有增强的功能;例如,scipy.linalg.eig 可以接受第二个矩阵参数来解决 广义特征值问题

Python 版本支持#

NumPy 和 SciPy 是否仍然支持 Python 2.7?#

支持 Python 2.7 的最后一个 NumPy 版本是 NumPy 1.16.x。支持 Python 2.7 的最后一个 SciPy 版本是 SciPy 1.2.x。支持 Python 3.x 的第一个 NumPy 版本是 NumPy 1.5.0。SciPy 中的 Python 3 支持是在 SciPy 0.9.0 中引入的。

SciPy 是否与 PyPy 兼容?#

一般来说,是的。最近对 PyPy 的改进使科学 Python 堆栈能够与 PyPy 一起使用。由于 SciPy 的大部分代码是用 C 扩展模块实现的,因此代码可能不会运行得更快(在大多数情况下,它仍然明显更慢,但是 PyPy 正在积极努力改进这一点)。如在基准测试时一样,您的经验是最好的指南。

SciPy 是否与 Jython 或 C#/.NET 兼容?#

不支持。Jython 从未工作过,因为它运行在 Java 虚拟机之上,并且无法与为标准 Python (CPython) 解释器编写的 C 扩展进行交互。

几年前,曾有人努力使 NumPy 和 SciPy 与 .NET 兼容。当时的一些用户报告称,在 32 位 Windows 上使用 Ironclad 成功使用了 NumPy。最后,Pyjion 是一个新项目,据报道它可以与 SciPy 一起使用。

无论如何,这些运行时/编译器超出了 SciPy 的范围,并且没有得到开发团队的官方支持。

在哪里获得帮助#

请参阅 社区 页面。

在此页面上