Dot-Net

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

  • November 11, 2010

幾天來,我一直在瘋狂地搜尋 Google 和 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 上的社區能夠提供他們對以下庫的任何經驗,我將不勝感激:

我對 F# for Numerics 很感興趣(因為我正在使用 F#),但我很難確定各種庫的優缺點。例如,各種庫中缺少或包含哪些功能,以及它們的使用難易程度以及它們的性能如何。

DotNumerics 似乎是 C# 中 Lapack 的全面實現,但我找不到任何人在任何地方分享他們的經驗。Math.NET 似乎最終會成為一個出色的、全面的 .NET 數學庫,但很難說這個項目的活躍程度,而且它在目前階段似乎非常不穩定。Alglib 曾有過一兩次被稱為可靠的說法,但我想了解更多關於它們相對於其他人的資訊。我喜歡支持原生 F# 數字庫的想法,但我不確定開發人員(Flying Frog Consultancy)對支持和開發 F# for Numerics 的承諾程度……以及他們計劃在 1.0 版本中包含哪些功能以及他們的目標日期是 1.0 版本。

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

在找圖書館之前,你應該先問“我想要什麼樣的數學圖書館?”。然後你會有一個標準列表,比如開源與否、高性能與否、便攜與否、易用與否。

以下是我對您列表中的庫的評論(我沒有使用最後兩個):

1)點數值

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

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

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

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

大部分功能都是從 Lapack 翻譯過來的。而且它的界面不是那麼使用者友好。(但你有 Lapack 風格界面的靈活性。)使用 lapack 風格界面意味著你需要更多地了解矩陣及其操作。

  1. dnAnalytics ( <http://dnanalytics.codeplex.com/> )

這個庫現在正在合併到 Math.Net。似乎合併還沒有完成。dnA 中的一些函式在 Math.Net 中仍然不可用。

  1. Math.NET ( <http://www.mathdotnet.com/> ) 它的實現是從零開始的,也就是說,它不是從Lapack 直接翻譯過來的。他們的目標是為 .Net 平台提供一個純託管的庫。這意味著易用性和便攜性是兩個主要目標。一個問題是他們自己的實現是否正確。一件好事是這個庫是可移植的,你可以毫不費力地在 Mono、XNA、Windows Mobile Phone 上使用它。

上述庫並不專注於 F#。然而,Math.Net 的一名團隊成員為 MS Research Cambridge 工作,並且是 F# 專家。就像 Cuda 說的,他們將為庫制定一個 F# 介面。他們還將提供本機包裝器。但也許你會等待很長時間,比“幾個月”還要長:)

出於對高性能的考慮,上述庫不提供本機包裝器(至少現在是這樣)。如果你想要原生性能 + .Net,你最好使用商業庫。有一些開源解決方案:

**1. <http://ilnumerics.net/>**這是 .Net 的類似 numpy 的解決方案。他們 PInvoke 到 Lapack dll(例如 netlib 中未優化的 lapack,來自 AMD 和 Intel 的優化版本。)

**2. F# 中的數學提供程序。**閱讀我在這個問題中的答案。由於 F# 原始碼現已開源。我可能會修改圖書館並發布我的更新:)

通常你不需要一個大的數學庫。您只需要一些功能,例如,如果您需要快速矩陣乘法過程,使用 PInovke 到平台優化的 BLAS dll 是最簡單的方法。如果您需要為孩子們做一個面向教育的數學軟體,那麼 Math.net 的質量就足夠了。如果您在一家公司並開發可靠的數學組件,那麼為什麼不使用由高質量團隊支持的商業組件呢?

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

引用自:https://stackoverflow.com/questions/4159385