在.NET上进行线性代数等科学计算 (转)

link: http://www.cnblogs.com/redmoon/archive/2011/03/29/1999242.html

对于工程类、图形等专业软件,需要大量的数学计算,而用的最多的就是线性代数的计算。

那么,在.NET之上,尤其.NET 4.0和VS2010之上要如何完成相关的线性代数计算呢?我想有如下几种方式:

一,自己动手、丰衣足食:根据自己软件的需要,增量式地逐步开发一些函数库。这种方式最大的问题是——重新制作轮子,所以大部分一般不宜采用这种方式。

二,使用开源(或免费的)组件:这种方式的好处是有很多优秀的开源(或免费)的工具可选择,缺点是使用起来需要较大的学习成本

三,使用商业组件:这种方式相对于第二种的好处是,支持和服务上有所保障,缺点不言而喻就是费用较高。

下面,我将重点介绍中.NET平台上有什么用的开源(免费)组件可用。

1,使用F#进行开发

F#作为一门混合语言(函数式语言+面向对象语言),从一开始就是具有进行数学计算的优势。不仅编写计算代码更自然,F#的函数库也为数学计算提供了很好的支持。

在F#的powerpack中包含有Microsoft.FSharp.Math的命名空间就是专门用于数学计算的。其中提供了matrix类型——一种在进行线性代数计算中非常常用和重要的类型。

关于matrix类型可以阅读这里的帮助。也可以参考这个博客:http://fdatamining.blogspot.com/2010/03/matrix-and-linear-algebra-in-f-part-i-f.html

但是,要进行高效的线性代数计算,F#还需要借助外部的函数库,不过F#已经提供了相应的接口方便外部函数库集成进来,即是FSharp.PowerPack.Math.Providers.dll(这个程序集只有在FSharp-1.9.7.8中才有)。

比如,F#可以集成LAPACK(LAPACK,其名為Linear Algebra PACKage的縮寫,是一以Fortran程式語言寫就,用於數值計算函式集。 LAPACK提供了豐富的工具函式,可用於諸如解多元線性方程式線性系統方程組的最小平方解、計算特徵向量、用於計算矩陣QR分解Householder轉換、以及奇異值分解等問題。 在NetLib亦提供了API經簡化的Fortran 95版本的LAPACK95。LAPACK以BSD授權的方法釋出。)

具体的集成方式可以参考:http://fdatamining.blogspot.com/2010/03/matrix-and-linear-algebra-in-f-part-ii.htmlhttp://fdatamining.blogspot.com/2010/03/compiling-lapack-for-net-usage.html

关于如何在F#中进行代数运算,这里有一个例子:http://fdatamining.blogspot.com/2010/04/matrix-and-linear-algebra-in-f-part-iii.html

其实,我上面引用的博客地址:http://fdatamining.blogspot.com/都是值得一读的。

2,使用IronPython进行开发

Python虽然不是函数式语言,但是其动态语言特性和代码风格也被很多人用来进行工程开发。而在Python之上有一个很著名的数学计算库——NumPySciPy,它也被移植到了.NET之上(移植的过程是在微软的帮助下)。

要使用这两个库,最好的就是通过Python Tools for Visual Studio——一个在VS2010中实现的Python集成开发环境来使用。

具体的使用向导可以访问:http://pytools.codeplex.com/wikipage?title=NumPy%20and%20SciPy%20for%20.Net

3,使用C#进行开发

在.NET 4.0中,加入了System.Numerics命名空间,为数学计算提供了一定的基础,但是.NET中还是没有内置线性代数的计算函数库。不过要使用C#开发,上面提到的LAPACK和SciPy都可以用。

对于LAPACK,也有.NET的版本,就是:DotNumerics

当然,还有很多第三方的开源、免费和商业的组件可用。

下面就来看看,还有那些组件:

  1. Extreme Optimization Numerical Libraries for .NET(商业)
  2. .NET Matrix Library(商业)
  3. NMath .NET(商业)
  4. NAG Library for .NET(商业)
  5. SCINET(商业)
  6. Math.Net(开源)
  7. Dambach Linear Algebra Framework(开源)
  8. ILNumerics.Net(开源)
  9. Mapack(开源,我们的LCA软件就是使用的这个,其实我做了一个Provider可以任意切换到其他函数库上,后面我会再写篇博客来介绍)
  10. Meta.Numerics(免费)

另外,对于使用哪种语言来进行科学计算开发,可以参考这篇博客的一些论述:C#-F#-Ironpython与科学计算,当然个人觉得F#和IronPython都适合进行科学计算。

时间: 2024-10-25 18:41:05

在.NET上进行线性代数等科学计算 (转)的相关文章

Python学习_科学计算

Python科学计算 包含Numpy.Matplotlib.Scipy.Pandas和scikit-learn 一.Numpy 1.Numpy特征和导入 (1)用于多维数组的第三方Python包 (2)更接近于底层和硬件 (高效) (3)专注于科学计算 (方便) (4)导入包:import numpy as np 2.list转为数组 (1)a = np.array([0,1,2,3]) (2)输出为:[0 1 2 3] (3)数据类型:<type 'numpy.ndarray'> 3.一维数

Python下科学计算包numpy和SciPy的安装

转载自:http://blog.sina.com.cn/s/blog_62dfdc740101aoo6.html Python下大多数工具包的安装都很简单,只需要执行 “python setup.py install”命令即可.然而,由于SciPy和numpy这两个科学计算包的依赖关系较多,安装过程较为复杂.网上教程较为混乱,而且照着做基本都不能用.在仔细研读各个包里的README和INSTALL之后,终于安装成功.现记录如下. 系统环境: OS:RedHat5 Python版本:Python2

Desktop Ubuntu 14.04LTS/16.04科学计算环境配置

Desktop Ubuntu 14.04LTS/16.04科学计算环境配置 计算机硬件配置 cpu i5 6代 内存容量 8G gpu GTX960 显存容量 2G(建议显存在4G以上,否则一些稍具规模的神经网络无法训练,会提示显存容量不足) 配置顺序 安装包 重要依赖 安装ubuntu            14.04   安装显卡驱动         nvidia-367   安装cuda tool kit        8.0   安装cuDNN             v5 安装版本取决

Python 网页爬虫 &amp; 文本处理 &amp; 科学计算 &amp; 机器学习 &amp; 数据挖掘兵器谱(转)

原文:http://www.52nlp.cn/python-网页爬虫-文本处理-科学计算-机器学习-数据挖掘 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工作中的第一辅助脚本语言,虽然开发语言是C/C++,但平时的很多文本数据处理任务都交给了Python.离开腾讯创业后,第一个作品课程图谱也是选择了Python系的Flask框架,渐渐的将自己的绝大部分工作交给了Python.这些年来,接触和使用了很多Python工具包,特别是在文本处理,科学计算,机器学习和数据挖掘领域,有很多很多

【Python】Python 网页爬虫 &amp; 文本处理 &amp; 科学计算 &amp; 机器学习 &amp; 数据挖掘兵器谱

好文 mark http://www.52nlp.cn/python-%E7%BD%91%E9%A1%B5%E7%88%AC%E8%99%AB-%E6%96%87%E6%9C%AC%E5%A4%84%E7%90%86-%E7%A7%91%E5%AD%A6%E8%AE%A1%E7%AE%97-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98 曾经因为NLTK的缘故开始学习Python,之后渐渐成为我工

[resource-]Python 网页爬虫 &amp; 文本处理 &amp; 科学计算 &amp; 机器学习 &amp; 数据挖掘兵器谱

reference: http://www.52nlp.cn/python-%e7%bd%91%e9%a1%b5%e7%88%ac%e8%99%ab-%e6%96%87%e6%9c%ac%e5%a4%84%e7%90%86-%e7%a7%91%e5%ad%a6%e8%ae%a1%e7%ae%97-%e6%9c%ba%e5%99%a8%e5%ad%a6%e4%b9%a0-%e6%95%b0%e6%8d%ae%e6%8c%96%e6%8e%98 一.Python网页爬虫工具集 一个真实的项目,一定是

Python下科学计算包numpy和SciPy的安装【原创】

Python下大多数工具包的安装都很简单,只需要执行 "python setup.py install"命令即可.然而,由于SciPy和numpy这两个科学计算包的依赖关系较多,安装过程较为复杂.网上教程较为混乱,而且照着做基本都不能用.在仔细研读各个包里的README和INSTALL之后,终于安装成功.现记录如下. 系统环境: OS:RedHat5 Python版本:Python2.7.3 gcc版本:4.1.2 各个安装包版本: scipy-0.11.0 numpy-1.6.2 n

Python科学计算函数库介绍

数值计算库 NumPy为Python提供了快速的多维数组处理的能力,而SciPy则在NumPy基础上添加了众多的科学计算所需的各种工具包,有了这两个库,Python就有几乎和Matlab一样的处理数据和计算的能力了. NumPy和SciPy官方网址: http://www.scipy.org NumPy为Python带来了真正的多维数组功能,并且提供了丰富的函数库处理这些数组.它将常用的数学函数都进行数组化,使得这些数学函数能够直接对数组进行操作,将本来需要在Python级别进行的循环,放到C语

1.5 Scipy:高级科学计算

医药统计项目可联系 QQ:231469242 http://www.kancloud.cn/wizardforcel/scipy-lecture-notes/129867 作者:Adrien Chauve, Andre Espaze, Emmanuelle Gouillart, Ga?l Varoquaux, Ralf Gommers Scipy scipy包包含许多专注于科学计算中的常见问题的工具箱.它的子模块对应于不同的应用,比如插值.积分.优化.图像处理.统计和特殊功能等. scipy可以