首页 > 解决方案 > Java 高性能线性代数库,功能类似于 Scala 的 Breeze

问题描述

我正在寻找一个可以有效处理添加小矩阵的库(内存占用最少)。有 JBLAS 或 ND4j 之类的选择(虽然我认为不是单线程的),但它们缺少下面描述的重要功能。

假设我有一个较大的矩阵和一个较小的矩阵,我需要将较小的矩阵添加到较大矩阵的区域中,而无需创建中间数组或将较小的矩阵增加到具有大量零的较大矩阵的大小。换句话说,我想从 Scala 的 Breeze 库中获取功能 - 您在矩阵上创建一个视图,然后您可以使用它来执行任何操作,例如添加子矩阵。

在 EJML 中打开了一个问题。

标签: javaperformancelinear-algebra

解决方案


好吧,似乎最好的选择是ojAlgo。根据这项综合测试,它具有出色的性能。重要的是它允许非常灵活的转换,可以就地和延迟执行(一次很多)。例如

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);

更多例子在这里。真正漂亮的 API 和功能。


推荐阅读