Abe*_*Abe 19 .net math f# linear-algebra libraries
我一直在疯狂地搜索谷歌和Stack Overflow,并且还没有找到任何最近的,完全相关的信息来回答以下问题:什么是最好的C#/ F#/ .NET数学库(特别是那些包装或实现的与Lapack等功能相同)?
我看到的Stack Overflow上最好的帖子之一是:https://stackoverflow.com/questions/3227647/open-source-math-library-for-f
该帖子和其他以前的帖子没有充分回答我的问题的原因是没有给出用户体验与各种图书馆的系统比较.
我对以下库(在实际使用中)如何完全实现Lapack(或一组广泛的功能等效线性代数)感兴趣; 而且,我很好奇他们相对于彼此的表现,特别是在非常大的矩阵上.另外,我想听听其他人利用各种图书馆的经验:困难,易用性等.
下面是"免费"/开源/价格实惠的.NET/F#/ C#数学库的综合列表 - 据我所知 - 它具有线性代数功能集.如果Stack Overflow上的社区能够通过以下库获得任何经验,我将非常感激:
我对于Numerics的F#感兴趣(因为我正在使用F#),但我很难确定各种库的优缺点.比如,哪些功能缺失或包含在各种库中,以及它们的使用方式和执行情况.
DotNumerics似乎是在C#中全面实现Lapack,但我找不到任何人在任何地方分享他们的经验.Math.NET似乎最终可能是一个优秀的,全面的.NET数学库,但很难说它是多么活跃的项目,而且它似乎在当前阶段非常不稳定.Alglib已经说过一两次坚固,但我想听到更多关于它们的信息.我喜欢支持原生F#数字库的想法,但我不确定开发人员(Flying Frog Consultancy)是如何致力于为Numerics支持和开发F#...以及他们计划在1.0版本中包含哪些功能以及他们的目标日期是1.0版本.
Yin*_*Zhu 16
选择数学库的一个常见缺陷是我们希望存在一个数学库.
在找到图书馆之前,首先应该问"我想要什么样的数学图书馆?".然后你将有一个标准列表,如开源与否,高性能与否,便携与否,易于使用与否.
以下是我对你列表中的库的评论(我没有使用过去的两个):
1)DotNumerics
他们使用fortran2C#转换器将Lapack过程代码转换为C#类.用户友好的C#包装器是为原始的Lapack类编写的.
2)Alglib(http://www.alglib.net/)
该库有多种语言版本,如delphi,c ++和c#.我相信它的历史比你列出的任何其他图书馆都要长.
大多数功能都是从Lapack翻译过来的.它的界面不是那么用户友好.(但是您具有Lapack样式界面的灵活性.)使用lapack样式接口意味着您需要了解有关矩阵及其操作的更多信息.
3)dnAnalytics (http://dnanalytics.codeplex.com/)
这个库现在正在合并到Math.Net中.似乎合并尚未完成.dnA中的一些函数在Math.Net中仍然不可用.
4)Math.NET(http://www.mathdotnet.com/)它的实现是从头开始的,即它不是Lapack的直接翻译.他们的目标是为.Net平台提供纯粹的托管库.这意味着易用性和可移植性是两个主要目标.一个问题是他们自己的实施是否正确.一个好处是,这个库是可移植的,你可以轻松地在Mono,XNA,Windows Mobile Phone上使用它.
上述图书馆不关注F#.然而,Math.Net的一名团队成员在剑桥大学MS研究院工作,是一名F#专家.像Cuda说的那样,他们将为图书馆设计一个F#界面.他们还将提供原生包装.但也许你会等待很长时间,超过"几个月":)
对于高性能的关注,上面的库不提供本机包装器(至少现在).如果你想要原生性能+ .Net,你最好使用商业图书馆.有一些开源解决方案:
1. http://ilnumerics.net/这是一个类似nNet的解决方案.Net.他们PInvoke到Lapack dll(例如netlib上的非优化lapack,AMD和Intel的优化版本.)
2. F#中的数学提供者.在这个问题上阅读我的答案.由于F#源代码现在是开源的.我可以修改库并发布我的更新:)
通常你不需要一个大的数学库.您只需要一些功能,例如,如果您需要快速矩阵乘法程序,使用PInovke到平台优化的BLAS dll是最简单的方法.如果你需要为孩子们做一个面向教育的数学软件,那么Math.net的质量就足够了.如果您在公司并开发可靠的数学组件,那么为什么不使用由高质量团队支持的商业组件?
找到一个完美的数学库很难.但是找到解决问题的库解决方案通常很容易.
Jon*_*rop 10
F#for Numerics是我公司的产品,用100%F#编写.我们的重点是一般技术(从FFT到随机数生成的所有内容)而不是专门的线性代数,尽管提供了基本的线性代数例程(Cholesky,LU,QR,各种矩阵/元素类型的SVD),我们特别感兴趣的是从F#使用.
如果你已经完成了LAPACK的全部工作,那么如果你有预算,我的建议是Alglib,如果你能负担得起,我的推荐是极端优化.Alglib是一个完全托管的代码,带有一个"笨拙"的"古怪"API,因此运行起来相对较慢并且使用起来很麻烦.Extreme Optimization是一个更好的API包装英特尔MKL和一些额外的例程,因此它更容易使用,运行速度更快.
我应该警告你,如果你来自开源背景,.NET库(免费,商业甚至框架本身)的一般质量相对较差.我尝试了你提到的许多其他库,并没有给它们留下深刻的印象.