如何添加ojalgo SparseArray的所有元素?

时间:2019-09-14 06:27:24

标签: java arrays ojalgo

我有一个SparseArray,需要获取其所有元素的总和

我目前正在做一个数组的点积,其中相同大小的数组填充有一个,但是我觉得应该有一些更简单(更有效?)的东西

在这里找不到合适的方法:https://javadoc.scijava.org/ojAlgo/org/ojalgo/array/SparseArray.html

我有:

SparseArray<Double> lhCounts = SparseArray.factory(Primitive64Array.FACTORY, dim).make();

然后使用它进行一些操作,最后想要一些返回所有元素之和的方法,例如:

array_sum = lhCounts.sum();

1 个答案:

答案 0 :(得分:2)

该类最初用作其他实现的委托,但是直接使用它是完全可以的。在这种情况下,最直接的解决方案可能是:

    array_sum = lhCounts.nonzeros().stream().mapToDouble(nz -> nz.doubleValue()).sum();

还可以代替创建Array1D。它具有更丰富的api。然后,您可以按照以下方式进行操作:

    Array1D<Double> lhCounts1D = Array1D.PRIMITIVE64.makeSparse(dim);
    array_sum = lhCounts1D.aggregateAll(Aggregator.SUM);

在这种情况下,非零流也可用

    array_sum = lhCounts1D.nonzeros().stream().mapToDouble(nz -> nz.doubleValue()).sum();

如果该“数组”实际上是2-D或N-D,则可以创建Array2D或ArrayAnyD。

    Array2D<Double> lhCounts2D = Array2D.PRIMITIVE64.makeSparse(dim, dim);
    ArrayAnyD<Double> lhCountsAnyD = ArrayAnyD.PRIMITIVE64.makeSparse(dim, dim, dim, dim);

Array1D,Array2D和ArrayAnyD API是为密集结构设计的。稍后添加了将它们实例化为稀疏的功能。在稀疏情况下,您可以使用它们执行的某些操作可能效率不高。您甚至可以做一些简单的愚蠢的事情,例如hugeSparseArray.fillAll(1.0);