簡體   English   中英

DotNumerics,AlgLib,dnAnalytics,Math.net,F#for Numerics,Mtxvec?

[英]DotNumerics, AlgLib, dnAnalytics, Math.net, F# for Numerics, Mtxvec?

我一直在瘋狂地搜索谷歌和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版本。

選擇數學庫的一個常見缺陷是我們希望存在一個數學庫。

在找到圖書館之前,首先應該問“我想要什么樣的數學圖書館?”。 然后你將有一個標准列表,如開源與否,高性能與否,便攜與否,易於使用與否。

以下是我對你列表中的庫的評論(我沒有使用過去的兩個):

1) DotNumerics

http://www.dotnumerics.com/

他們使用fortran2C#轉換器將Lapack過程代碼轉換為C#類。 用戶友好的C#包裝器是為原始的Lapack類編寫的。

2) Alglib( http://www.alglib.net/

該庫有多種語言版本,如delphi,c ++和c#。 我相信它的歷史比你列出的任何其他圖書館都要長。

大多數功能都是從Lapack翻譯過來的。 它的界面不是那么用戶友好。 (但是您具有Lapack樣式界面的靈活性。)使用lapack樣式接口意味着您需要了解有關矩陣及其操作的更多信息。

3) dnAnalyticshttp://dnanalytics.codeplex.com/

這個庫現在正在合並到Math.Net中。 似乎合並尚未完成。 dnA中的一些函數在Math.Net中仍然不可用。

4) Math.NEThttp://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的質量就足夠了。 如果您在公司並開發可靠的數學組件,那么為什么不使用由高質量團隊支持的商業組件?

找到一個完美的數學庫很難。 但是找到解決問題的庫解決方案通常很容易。

F#for Numerics是我公司的產品,用100%F#編寫。 我們的重點是一般技術(從FFT到隨機數生成的所有內容)而不是專門的線性代數,盡管提供了基本的線性代數例程(Cholesky,LU,QR,各種矩陣/元素類型的SVD),我們特別感興趣的是從F#使用。

如果你已經完成了LAPACK的全部工作,那么如果你有預算,我的建議是Alglib ,如果你能負擔得起,我的推薦是極端優化 Alglib是一個完全托管的代碼,帶有一個“笨拙”的“古怪”API,因此運行起來相對較慢並且使用起來很麻煩。 Extreme Optimization是一個更好的API包裝英特爾MKL和一些額外的例程,因此它更容易使用,運行速度更快。

我應該警告你,如果你來自開源背景,.NET庫(免費,商業甚至框架本身)的一般質量相對較差。 我嘗試了你提到的許多其他庫,並沒有給它們留下深刻的印象。

我還建議查看一個名為FinMath的新的.net數值庫,我在開發中使用了它。 它為許多MKL(基於它的Intel Math Kernel Library)功能提供了易於使用的.net類包裝器,例如線性代數(BLAS和LAPACK),統計和FFT。 此外,它還包含許多高級方法,如線性和二次規划求解器,聚類分析等。 它還包括各種.net到本地c編組優化,這導致高性能和易於使用的單dll解決方案。

但不幸的是,它不是開源的,不是免費的,與LAPACK相比,大多數方法只支持雙精度浮點數。 並且對於很少使用的LAPACK方法,沒有提供包裝器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM