作为 Python Tools for Visual Studio 项目的一部分,NumPy 和 SciPy 程序库已经迁移到.NET 上了。这项迁移通过本地的 C 核心组合了 C#和 C 接口,从而所有.NET 语言都能够从中受益。
IronPython 对 NumPy 和 SciPy 的端口是完整的.NET 端口,并且包含了针对一般本地 C 核心的自定义 C#/C 接口。这意味着不仅 IronPython 能够使用所有功能,而且所有.NET 语言——像 C#和 F#——也可以使用,它们只需要访问 C#接口对象, 或者有时需要从其它.NET 语言解析 IronPython 表达式。这意味着多维数组对象(ndarray)可以在 IronPython 和 C#或者 F#代码之间平滑地传递。此外,ndarray 对象实现了标准的 IEnumerable 接口,这让数组对象可以由现存的代码经常使用,即便不是特别针对 NumPy 的代码也没问题。
NumPy 是一种很低级别的 API,用于在大型、多维数组和矩阵上执行数学运算。这个库最初叫做 Numeric,是在 1995 年创建的,那仅仅是 Python 1.0 发布一年之后。采用当前名称的版本是在 2005 年创建的,那时这个产品组合了早先的版本和名为 numarray 的竞争对手的程序库。
SciPy 是在其基础之上构建的。据维基百科上所说,“SciPy 包含很多模块,能够用于优化、线性代数、整合、插入、特定函数、FFT、符号和图像处理、ODE 解析器以及其它科学和工程领域的一般任务。” 人们经常会考虑把它作为 MATLAB 的替代方案,尽管 SciPy 经常需要与其它库组合才能够完全替代MATLAB。
NumPy 和 SciPy 的组合为一般的.NET 代码提供了很多显而易见的优势。.NET 的垃圾回收程序能够比手动的内存管理提供更好的性能,还有就是,通过高度优化的 C 代码,我们可以获得很好的计算速度。
在此之上还有视图的概念。NumPy 不会复制数组,而是让我们可以创建作为其他数组子集存在的数组。改变子集(也就是所说的视图),也会改变原始的数组。这让我们可以在不牺牲性能的情况下获得更整洁的代码。
查看英文原文: NumPy and SciPy for .NET
评论