我有一个SparseArray,需要获取它所有元素的总和
我目前正在做一个数组的点积,用一个相同大小的数组填充1,但我觉得应该有更直接的(和有效的?)
这里找不到合适的方法:https://javadoc.scijava.org/ojAlgo/org/ojalgo/array/SparseArray.html
我有:
SparseArray<Double> lhCounts = SparseArray.factory(Primitive64Array.FACTORY, dim).make();然后对它进行一些操作,最后需要一些方法来返回所有元素的总和,类似于:
array_sum = lhCounts.sum();发布于 2019-09-14 15:32:33
该类主要用作其他实现的委托,但直接使用它也是非常好的。在这种情况下,最直接的解决方案可能是:
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();如果这个“数组”实际上是2D或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应用编程接口是为高密度结构设计的。稍后添加了将它们实例化为稀疏的功能。在稀疏的情况下,您可以使用它们执行的某些操作可能效率不高。你甚至可以做一些非常愚蠢的事情,比如hugeSparseArray.fillAll(1.0);
https://stackoverflow.com/questions/57933028
复制相似问题