我希望在大小为800x300元素的浮点数组上做一些基于元素的操作(加法,乘法,sqrt等)。
使用矩阵库(JAMA,EJML等)执行此操作可以获得多少加速(如果有的话),而只是在for循环中执行元素操作?
对于循环看起来更有吸引力,因为我的方程可能会变得复杂,并且for循环意味着我可以保持所有方程式 - 用普通的旧中缀表示法。由于java不支持运算符重载,因此使用矩阵库不会那么简单。所以,我只想使用矩阵库,如果它意味着真正的加速。 (速度在这里很重要。)
答案 0 :(得分:2)
我建议你使用一些矩阵库。在大多数情况下,它应该像循环一样简单。但它也可以跑得更快。那么,你将免费得到什么:API&相同或更好的性能。在编写元素操作时,它还节省了一些时间。
作为la4j库的作者,我可以说使用第三方库让您有机会从新版本中获得更快,更快的代码。例如。您可以根据需要选择la4j。当前(版本0.4.0-0.4.5)对元素操作使用简单的for循环计算。因此,它不会比手写代码快。但是,我现在正在为la4j开发一个新的并行引擎,允许以并行模式运行代码而不会对API进行任何重大更改。像这样:
Matrix a = new Basic2DMatrix(...); // simple 2D array matrix
Matrix b = new Basic2DMatrix(...); // that is too
Matrix c = a.multiply(b); // a * b in sequental mode
Matrix c = a.par().multiply(b); // a * b in parallel mode
因此,您需要做的就是更改一段代码。所有这些优势都可以通过像la4j这样的库免费获得。让图书馆完成他们的工作并花费你解决实际问题。