java - Java 中逐元素运算的矩阵库与 for 循环

标签 java matrix

我希望对大小约为 800x300 个元素的 float 组执行一些按元素运算(加法、乘法、sqrt 等)。

与仅在 for 循环中执行逐元素操作相比,使用矩阵库(JAMA、EJML 等)执行此操作可以获得多少加速(如果有)?

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 这样的库,您可以免费获得所有这些优势。让图书馆完成他们的工作并花你的时间解决实际问题。

关于java - Java 中逐元素运算的矩阵库与 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18037952/

相关文章:

matlab - 如何将两个不同长度的向量相乘

c++ - 正确访问 const 一行特征矩阵

c - 转置矩阵

python - Django - 如何显示数据矩阵,在每一行和每一列的末尾都有总和

java - 无法使 Java GridBagConstraints 工作

java - 为什么在Optional.map(byte[]::clone) 上出现编译错误?

Javascript文件对象相当于java中的文件对象

java - 错误 : Unable to load configuration. - 操作,在 eclipse 上的 apache 上运行 Struts 2 时由 : Action class not found , 引起

c++ - 矩阵运算,构造函数问题

带有 "this"关键字的 Java 复制构造函数