Java 具有类似于 Scala 的 Breeze 功能的高性能线性代数库
Java high performance linear algebra library with features similar to Scala's Breeze
我正在寻找一个可以有效处理小矩阵相加的库(内存占用最少)。有 JBLAS 或 ND4j 之类的选择(虽然我认为不是单线程的)但它们缺少下面描述的重要功能。
假设我有一个较大的矩阵和一个较小的矩阵,我需要将较小的矩阵添加到较大矩阵的区域,而无需创建中间数组或将较小的矩阵增大到较大矩阵的大小很多零。换句话说,我想从 Scala 的 Breeze 库中获得功能——你在矩阵上创建一个视图,然后你可以用它来做任何操作,比如添加一个子矩阵。
在 EJML 中打开了 issue。
嗯,看来最好的选择是ojAlgo. It has great performance according to this comprehensive test。重要的是它允许非常灵活的转换,这些转换可以就地延迟执行(一次执行很多)。例如
PrimitiveDenseStore m1 = PrimitiveDenseStore.FACTORY.makeZero(10, 10);
PrimitiveDenseStore m2 = PrimitiveDenseStore.FACTORY.makeZero(3, 3);
m2.add(0, 0, 5D);
m2.add(1, 1, 2D);
m2.add(1, 2, 3D);
m2.add(2, 1, -10D);
m1
.regionByColumns(4, 5, 6)
.regionByRows(4, 5, 6)
.modifyMatching(PrimitiveMath.ADD, m2);
assertThat(m1.aggregateAll(MINIMUM)).isEqualTo(5);
更多示例here。真的很漂亮 API 和功能。
我正在寻找一个可以有效处理小矩阵相加的库(内存占用最少)。有 JBLAS 或 ND4j 之类的选择(虽然我认为不是单线程的)但它们缺少下面描述的重要功能。
假设我有一个较大的矩阵和一个较小的矩阵,我需要将较小的矩阵添加到较大矩阵的区域,而无需创建中间数组或将较小的矩阵增大到较大矩阵的大小很多零。换句话说,我想从 Scala 的 Breeze 库中获得功能——你在矩阵上创建一个视图,然后你可以用它来做任何操作,比如添加一个子矩阵。
在 EJML 中打开了 issue。
嗯,看来最好的选择是ojAlgo. It has great performance according to this comprehensive test。重要的是它允许非常灵活的转换,这些转换可以就地延迟执行(一次执行很多)。例如
PrimitiveDenseStore m1 = PrimitiveDenseStore.FACTORY.makeZero(10, 10);
PrimitiveDenseStore m2 = PrimitiveDenseStore.FACTORY.makeZero(3, 3);
m2.add(0, 0, 5D);
m2.add(1, 1, 2D);
m2.add(1, 2, 3D);
m2.add(2, 1, -10D);
m1
.regionByColumns(4, 5, 6)
.regionByRows(4, 5, 6)
.modifyMatching(PrimitiveMath.ADD, m2);
assertThat(m1.aggregateAll(MINIMUM)).isEqualTo(5);
更多示例here。真的很漂亮 API 和功能。