.Net上真正的计算利器ILNumerics

            起因:前段时间写程序时需要大量的线性代数方面的运算,当时比较了几种.Net上的数学库,选择使用了Math.net,它是支持.net的一个开源数学库,提供了包括线性代数,随机数生成器,概率统计傅立叶变换等一系列库函数。那时做的矩阵运算都不超过100x100,所以程序运行起来勉强还可以接受,但后来随着数据库增长,矩阵(从数据库获取数据构造)包含的数据量逐渐超过10000,程序就卡在那里不动了。在确认的确是矩阵运算导致程序性能急剧下降后,我不得不寻找新的数学库,最终我发现了ILNumerics!Math.net有的功能它基本都有,但ILNumerics的执行性能远远超过了Math.net。

           在读了ILNumerics大量文档后,我先做了个小测试,计算大矩阵的逆矩阵,比较ILNumerics和Math.net的矩阵运算性能,结果如下图(由于我使用的计算中,矩阵求逆,转置和相乘使用较多,我仅比较了这几个,故不算严格测试,算个感性的估计吧,所以,就不给出测试代码了)。


可以看到,在计算大矩阵时,ILNumberics明显要快得多。经测试,ILNumerics在计算元素数量在千万级时仍然保持在30s以内,但Math.net的计算时间已经超过了我的耐心。

于是我正式将它用到正在开发的程序中,瞬间感到了飞的感觉。

独乐不如众乐,所以我简单介绍一下ILNumerics,希望可以帮到有需要的朋友。

--------------------------------------------*****-----------------------------------------------------------------------------**************----------------------------------------------------------------------------------------

首先是ILNumerics网站:http://ilnumerics.net/$Home.html。

然后当然要说说运行速度,大家都知道程序语言越高级,执行效率越低,所以在.net编写计算类的程序就要把性能放在首位。而ILNumerics在性能上做得相当出色。下面是来自官网(图片网址:http://ilnumerics.net/img/perfcomp_numpy_matlab_fortran_ilnumericsc_th.png)的一张图片,显示其优秀的执行性能。


ILNumerics主要在垃圾回收上下了功夫,所以运行速度甚至可以追赶本地C库函数。

另外,ILNumerics具有超强绘图功能,如果希望在程序中加入类似Matlab绘图功能的话,那么ILNumerics会是不错的选择,如下图所示(图片来自http://ilnumerics.net/$VisualExamples.html)。



还有和Matlab相似之处是,ILNumerics的矩阵运算有很多语法都和matlab很相似,使用它写相关运算时让人感觉就是在写matlab程序,这一点详细查看帮助文档就知道了。说到这里,就需要附带说一下,好软件一定要配套好文档,ILNumerics的文档是非常丰富的,让人用起来有理有据,入门迅速。

最后说一句,ILNumerics是开源软件!

我将在下一篇文章中简单介绍一下ILNumerics入门使用,以供参考。

你可能感兴趣的:(工具库)