该类主要用作其他实现的委托,但直接使用它完全没问题。在这种情况下,最直接的解决方案可能是:
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 或 ND,您可以创建一个 Array2D 或 ArrayAnyD 来代替。
Array2D<Double> lhCounts2D = Array2D.PRIMITIVE64.makeSparse(dim, dim);
ArrayAnyD<Double> lhCountsAnyD = ArrayAnyD.PRIMITIVE64.makeSparse(dim, dim, dim, dim);
Array1D、Array2D 和 ArrayAnyD api:s 专为密集结构而设计。稍后添加了将它们实例化为稀疏的能力。在稀疏的情况下,您可以用它们做的一些事情可能不是很有效。你甚至可以做一些简单的愚蠢的事情,比如hugeSparseArray.fillAll(1.0)
;