.NET矩阵库

28
我正在寻找一个好的(经过充分测试、功能齐全且界面友好).NET/C#矩阵库。我的主要要求是它应该是免费的(在这种情况下,我并不特别关心它是否开源),并且最好支持sparse matrix操作。必备要求包括所有基本操作(例如乘法、转置、求逆),以及查找特征值和特征向量。实现数值方法而非/以及分析方法来发现特征值,尤其是Lanczos algorithm用于稀疏矩阵,将会非常有用,因为我要处理的矩阵非常大(长度超过10,000),而且也相当稀疏。话虽如此,我可能要求有点过高了,因此任何完整的矩阵库建议都可以。

现在我知道Python有一两个有用的库可用于这些任务(即NumPy/SciPy),但不幸的是.NET在这个领域似乎缺乏。

搜索结果显示以下库可以供我使用:

然而,由于我没有使用过任何这些库或其他库的经验(也没有足够的时间来正确地检查它们),因此非常感谢这里的任何人都能讨论他们对各种库的推荐,特别是与适用性相关的优缺点以及他们的一般经验。

求助MatLab始终是一个选择,但不是首选,因为如果我可以直接将矩阵数学集成到我的程序中,那将更加方便。


因此,截至2022年12月3日,关于这个问题仍然没有任何进展。与Java或Python相比,Microsoft语言的开源从未接近过,并且不太可能会接近。 - duffymo
9个回答

10

编辑:

上次我评估时还不太完整,但是现在活动很多,所以你也应该考虑(免费且开源的)Math.NET Numerics

现在看来,他们已经完成了新版本,并添加了稀疏矩阵支持以及其他很好的功能。


如果您想要更强大的支持,目前不幸必须进入商业软件包。

有两个非常功能丰富的软件包,两者都非常擅长支持矩阵。 Extreme Numerics效果很好,并且具有一些非常好的功能。我也听说过IMSL Visual Numerics数学库非常好。


1
是啊,我开始怀疑你是对的。商业软件包对我来说并不是一个选择,因为我是一名大学生。还是谢谢你的建议。 - Noldorin
@Noldorin:我会写信给Extreme Numerics的Jeremy,询问他是否可以为你提供研究许可证,因为你是学生,并且没有商业用途。这是一家小公司,所有者似乎非常友好和负责任。(他在支持、售前等方面非常出色。)这不会有什么坏处。;) - Reed Copsey
@Noldorin:我刚想起dnAnalytics,然后也加上了。它可能是最好的非商业选项。 - Reed Copsey
@Reed:dnAnalytics真是个好东西。:) 我同意,它看起来比Mapack更容易使用,特别是因为支持稀疏矩阵。我现在非常想用它,然后在其上实现Lanczos算法,或者最坏的情况下将矩阵导出到Matlab并让它为我执行。如果这些都不行,我肯定会尝试联系Extreme Numerics的Jeremy。 - Noldorin
@Reed:感谢您持续的建议和评论。答案属于您。 :) - Noldorin

3

试试 ILNumerics:我们作为开源项目拥有相对悠久的历史,并最近改为商业许可证以提供更好和可靠的支持。我有偏见,但这里列出了一份简短的功能列表:

  • 更好的内存管理,因此...
  • 更快的算法
  • 使用MKL进行线性代数计算
  • n维数组类,语法类似于Matlab
  • 3D图形控件
  • 支持32/64位
  • 支持mono
  • 完整功能列表

2

我以前使用过US Mapack,发现它非常好。

虽然它可能不支持稀疏矩阵,但是它支持所有基本的线性代数函数。


是的,似乎没有支持稀疏矩阵的库。不过还是谢谢你的推荐。 - Noldorin

2

这两个似乎都是商业库。真遗憾,因为它们看起来是相当不错的库... - Noldorin
@Noldorin:我曾经在.NET领域进行了相当彻底的搜索。所有好的、强大的矩阵库基本上都是商业化的(至少在2008年初是这样)。 - Reed Copsey
@Reed:是啊,这一点我一点也不感到惊讶……无论如何,我会相信你的话的。不过我在想,使用Mapack库并在其上实现Lanczos算法是否可以完成这项工作呢? - Noldorin
@Noldorin:我认为在.NET世界中,dnAnalytics比Mapack更好-请参见我的编辑以获取链接。 - Reed Copsey

1

1

我在大学的神经网络项目中使用了Mapack(.Net版本而非COM版本)。我无法确切地记得该库的细节,但它完成了我需要的一切,并且使用起来并不特别繁琐。


共识似乎是(至少根据两个答案和我在其他地方读到的一点内容),Mapack是免费库的首选,尽管它并不完美。我也正在为一个大学项目使用矩阵功能,虽然它是基于物理的,所以只要我能得到结果,方法就不太重要了。无论如何,谢谢。 - Noldorin

1

Meta.Numerics(托管在codeplex上)是一个免费的软件包,可计算非对称矩阵的特征值和特征向量,但目前尚未特别处理稀疏矩阵。


谢谢您的建议。我可能仍然会选择dnAnalytics,因为它可以很好地处理稀疏矩阵,但那似乎是一个有用的通用库要记住。 - Noldorin

0

1
很不幸,对我来说它们并不是真正的选择,因为它们只支持最大4x4大小的矩阵!恐怕我需要一些能够处理具有数千行/列的矩阵的东西,并且最好能够高效地处理稀疏矩阵(例如在乘法方面)。 - Noldorin

0
关于.NET和Python,您可以使用IronPython。但是,您还需要Ironclad才能使SciPy和NumPy与IronPython配合使用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接