SciPy 是一个用于 Python 的开源(BSD 许可)科学和数值工具集。它目前支持特殊函数、积分、常微分方程 (ODE) 求解器、梯度优化、并行编程工具、用于快速执行的表达式到 C++ 编译器等。一个好的经验法则是,如果它在数值计算的通用教科书(例如,著名的 Numerical Recipes 系列)中有所介绍,那么它可能在 SciPy 中实现。
SciPy 是免费提供的。它作为开源软件发布,这意味着您可以完全访问源代码,并可以以其宽松的 BSD 许可允许的任何方式使用它。
SciPy 的许可证根据 BSD 许可证的条款,可免费用于商业和非商业用途 此处。
实际上,时间关键的循环通常是用 C、C++ 或 Fortran 实现的。SciPy 的一部分是建立在 https://www.netlib.org/ 上免费提供的科学例程之上的薄层代码。Netlib 是一个巨大的存储库,其中包含用 C 和 Fortran 编写的极其宝贵且健壮的科学算法。重新编写这些算法将是愚蠢的,并且需要数年时间才能调试它们。SciPy 使用各种方法来生成围绕这些算法的“包装器”,以便它们可以在 Python 中使用。一些包装器是通过用 C 手动编码生成的。其余部分是使用 SWIG 或 f2py 生成的。SciPy 的一些较新的贡献要么完全是用 Cython 或 Pythran 编写的,要么是用它们包装的。
第二个答案是,对于困难的问题,更好的算法可以极大地缩短解决问题所需的时间。因此,使用 SciPy 的内置算法可能比用 C 编写的简单算法快得多。
SciPy 开发团队努力使 SciPy 尽可能可靠,但与任何软件产品一样,错误确实会发生。如果您发现影响您软件的错误,请通过在 SciPy 错误跟踪器 中提交工单来告诉我们。
前往我们的 社区 页面。我们热衷于更多人参与编写代码、测试、文档以及帮助网站。
是的,许多公司为 SciPy 提供商业支持,例如 Anaconda、Enthought 和 Quansight。
在理想情况下,NumPy 只包含数组数据类型和最基本的操作:索引、排序、重塑、基本逐元素函数等。所有数值代码都应该位于 SciPy 中。但是,NumPy 的重要目标之一是兼容性,因此 NumPy 尝试保留其任一前身支持的所有功能。因此,NumPy 包含一些线性代数函数和傅里叶变换,即使这些函数更适合放在 SciPy 中。无论如何,SciPy 包含更完整版本的线性代数模块,以及许多其他数值算法。如果您使用 Python 进行科学计算,您可能应该同时安装 NumPy 和 SciPy。大多数新功能都属于 SciPy 而不是 NumPy。
SciPy 的功能不包括绘图功能,它专注于数值对象和算法。有几个包与 SciPy 紧密集成,可以生成高质量的绘图,例如非常流行的 Matplotlib。其他流行的选择包括 Bokeh、Plotly 和 Altair。
与 2D 绘图一样,3D 图形也不在 SciPy 的范围内,但与 2D 情况一样,也存在与 SciPy 集成的包。 Matplotlib 在 mplot3d
子包中提供基本的 3D 绘图,而 Mayavi 提供广泛的高质量 3D 可视化功能,利用强大的 VTK 引擎。
numpy.linalg
和 scipy.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 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 中引入的。
一般来说,是的。最近对 PyPy 的改进使科学 Python 堆栈能够与 PyPy 一起使用。由于 SciPy 的大部分代码是用 C 扩展模块实现的,因此代码可能不会运行得更快(在大多数情况下,它仍然明显更慢,但是 PyPy 正在积极努力改进这一点)。如在基准测试时一样,您的经验是最好的指南。
不支持。Jython 从未工作过,因为它运行在 Java 虚拟机之上,并且无法与为标准 Python (CPython) 解释器编写的 C 扩展进行交互。
几年前,曾有人努力使 NumPy 和 SciPy 与 .NET 兼容。当时的一些用户报告称,在 32 位 Windows 上使用 Ironclad 成功使用了 NumPy。最后,Pyjion 是一个新项目,据报道它可以与 SciPy 一起使用。
无论如何,这些运行时/编译器超出了 SciPy 的范围,并且没有得到开发团队的官方支持。
请参阅 社区 页面。