我希望对大小约为 800x300 个元素的浮点数组进行一些元素操作(加法、乘法、sqrt 等)。
使用矩阵库(JAMA、EJML 等)执行此操作比仅在 for 循环中执行元素操作可以得到多少加速(如果有)?
For 循环看起来更有吸引力,因为我的方程式可能会变得有点复杂,而 for 循环意味着我可以保持所有方程式原样——使用简单的旧中缀表示法。由于 java 不支持运算符重载,因此使用矩阵库不会那么简单。所以,如果它意味着真正的加速,我只想使用矩阵库。(速度在这里很重要。)
我建议您为此使用一些矩阵库。在大多数情况下,它应该像简单的 for 循环一样快速运行。但它也可以运行得更快。因此,您将免费获得: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 之类的库,您将免费获得所有这些优势。让图书馆完成他们的工作并花你的时间解决实际问题。