Begtostudy(白途思)'s Professional Technology Blog

欢迎访问begtostudy的专业知识博客!主要是专业技术和算法为主。
  首页  :: 联系 :: 订阅 订阅  :: 管理

numpy和scipy终于可以直接用在.net上了

Posted on 2011-11-04 00:08  白途思  阅读(7531)  评论(1编辑  收藏  举报

科学计算语言,底层的当属fortran和C,上层的是matlab用户最多了,居然可以排进世界十大语言。
但是matlab的效率和部署问题,使得很多人只在其上进行算法开发、仿真、调试,之后还要用通用语言重写算法实现。
将matlab是商业软件,python作为一种开放的语言逐渐在科学计算领域流行起来。
numpy和scipy就是基于python开发的两个库。
其实还有很多其他科学计算软件。只是python作为一种通用脚本语言易用,易集成。
所以易用,是像matlab一样随写随运行,所谓易集成,就是可以使用很多其他领域开发的包,而不局限在科学计算领域。

python作为一种脚本语言需要解释器支持,一种是CPython,基于C语言开发的,跨平台性好,一种是Ironpython,基于.net语言开发的,和.net程序结合很好。
同一种语言可以运行在上面两个平台,但是上面两个平台的库互调用就很麻烦了。
比如numpy和scipy就是在CPython上开发的,用在ironpython里需要ironclad做转换。

现在numpy和scipy也做了在Ironpython上可以直接运行的版本,就是本文介绍的。
可以看这个
http://pytools.codeplex.com/wikipage?title=NumPy%20and%20SciPy%20for%20.Net

下面是转载的:

作为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

前往Begtostudy的编程知识博客(CSDN)