首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >DotNumerics、AlgLib、dnAnalytics、Math.net、用于数值计算的F#、Mtxvec?

DotNumerics、AlgLib、dnAnalytics、Math.net、用于数值计算的F#、Mtxvec?
EN

Stack Overflow用户
提问于 2010-11-12 05:22:22
回答 3查看 6.3K关注 0票数 20

我疯狂地搜索了谷歌和Stack Overflow好几天了,还没有找到任何最新的、完全相关的信息来回答以下问题:哪些是最好的C#/F#/.NET数学库(特别是那些包装或实现了与Lapack相同功能的库)?

我在Stack Overflow上看到的一个更好的帖子是:https://stackoverflow.com/questions/3227647/open-source-math-library-for-f

这篇文章和其他之前的文章没有充分回答我的问题的原因是,没有给出各种库的用户体验的系统比较。

我感兴趣的是以下库(在实际使用中)如何完整地实现Lapack (或一组广泛的等效线性代数功能);而且,我对它们的相对性能很感兴趣,特别是在非常大的矩阵上。此外,我还想听听其他人使用各种库的经验:难度、易用性等。

下面是一个“免费”/opensource/价格适中的.NET/F#/C#数学库的综合列表,据我所知,这些数学库有一个线性代数特性集。如果Stack Overflow上的社区能分享他们在以下库方面的经验,我将深表感激:

我对F# for Numerics很感兴趣(因为我正在使用F#),但是我很难确定各种库的优缺点。例如,各种库中缺少或包含哪些功能,以及这些功能使用起来有多容易,执行起来有多好。

DotNumerics似乎是C#中Lapack的全面实现,但我在任何地方都找不到任何人分享过他们的经验。Math.NET似乎最终会成为.NET的一个优秀的、全面的数学库,但很难说这个项目有多活跃,而且在目前的阶段,它似乎非常不稳定。人们曾说过一两次Alglib是可靠的,但我想了解更多关于它的相关信息。我喜欢支持原生F#数值库的想法,但我不确定开发人员(飞蛙咨询公司)支持和开发用于数值…的F#的决心有多大他们计划在1.0版本中包含哪些功能,以及1.0版本的目标日期是什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-12 14:12:15

选择数学库的一个常见陷阱是,我们希望存在一个适用于一切的数学库。

在找到一个库之前,你应该首先问“我想要什么样的数学库?”然后你会有一个标准列表,比如开源与否,高性能与否,可移植性与否,易用性与否。

以下是我对您列表中的库的评论(我还没有使用后两个库):

1) DotNumerics

(http://www.dotnumerics.com/)

它们使用一个将Lapack过程代码转换成C#类的fortran2C#转换器。用户友好的C#包装器是为原始的Lapack类编写的。

2) Alglib ()

该库有多种语言版本,如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手机上使用它。

上面的库并不关注F#。然而,Math.Net的一名团队成员在剑桥MS Research工作,是一名F#专家。就像库达说的那样,他们将为这个库设计一个F#接口。此外,它们还将提供本机包装器。但也许你会等待很长时间,比“几个月”更长:)

出于对高性能的考虑,上面的库没有提供本机包装器(至少现在是这样)。如果你想要原生性能+ .Net,你最好使用商业化的库。有一些开源的解决方案:

1. 这是一个类似.Net的numpy解决方案。他们PInvoke到Lapack dll(例如,netlib上的未优化的lapack,来自AMD和英特尔的优化版本)。

2. F#中的数学提供程序。this question中读取我的答案。因为F#源代码现在是开源的。我可能会修订库并发布我的更新:)

通常你不需要一个大的数学库。你只需要一些功能,例如,如果你需要一个快速的矩阵乘法过程,使用PInovke到一个平台优化的BLAS dll是最简单的方法。如果你需要为孩子们做一个面向教育的数学软件,那么Math.net的质量就足够了。如果你在一家公司开发可靠的数学组件,那么为什么不使用由高质量团队支持的商业组件呢?

找到一个完美的数学库是很困难的。但是为你的问题找到一个库解决方案通常很容易。

票数 18
EN

Stack Overflow用户

发布于 2010-11-12 18:47:53

F# for Numerics是我公司的一个产品,用100%的F#编写。我们的重点是一般技术(从FFT到随机数生成),而不是特定的线性代数,尽管提供了基本的线性代数例程(Cholesky,LU,QR,SVD on各种矩阵/元素类型),我们对F#的易用性特别感兴趣。

如果你想要全面的LAPACK,那么我的建议是Alglib,如果你有预算,或者Extreme Optimization,如果你能负担得起。Alglib是一个完全托管的代码,它有一个“怪异”的API,所以它运行起来相对较慢,使用起来也比较麻烦。Extreme Optimization是一个更好的API,它包装了英特尔MKL和一些额外的例程,因此它更易于使用,运行速度也更快。

我应该警告你,如果你来自开源背景,.NET库(免费的,商业的,甚至框架本身)的总体质量是相对较差的。我尝试了您提到的许多其他库,但对它们一点也不感兴趣。

票数 10
EN

Stack Overflow用户

发布于 2011-11-10 21:09:24

我还可以建议查看新的名为FinMath的.net数值库,我在开发中使用了它。它为许多MKL (Intel Math Kernel Library )功能提供了易于使用的.net类包装,例如线性代数(BLAS和LAPACK)、统计和快速傅立叶变换。此外,它还包含一些高级方法,如线性和二次规划求解器,聚类分析等。它还包括各种.net到本机c编组的优化,这导致了高性能和易于使用的单一dll解决方案。

但不幸的是,它不是开源的,也不是免费的,而且与LAPACK相比,大多数方法只支持双精度浮点reals。对于很少使用的LAPACK方法,没有提供包装器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4159385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档