为.NET 所用的 NumPy 和 SciPy

  • Jonathan Allen
  • 侯伯薇

2011 年 8 月 7 日

话题:.NETPython语言 & 开发架构

作为 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
.NETPython语言 & 开发架构