Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何添加ojalgo SparseArray的所有元素?_Java_Arrays_Ojalgo - Fatal编程技术网

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

Java 如何添加ojalgo SparseArray的所有元素?,java,arrays,ojalgo,Java,Arrays,Ojalgo,我有一个SparseArray,需要得到它所有元素的总和 我目前正在做一个数组的点积,用一个大小相同的数组填充一个,但我觉得应该有更直接的东西(和有效的?) 在此处找不到合适的方法: 我有: SparseArray<Double> lhCounts = SparseArray.factory(Primitive64Array.FACTORY, dim).make(); 中的那个类主要用作其他实现的委托,但直接使用它是完全正确的。在这种情况下,最直接的解决方案可能是: arr

我有一个SparseArray,需要得到它所有元素的总和

我目前正在做一个数组的点积,用一个大小相同的数组填充一个,但我觉得应该有更直接的东西(和有效的?)

在此处找不到合适的方法:

我有:

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

中的那个类主要用作其他实现的委托,但直接使用它是完全正确的。在这种情况下,最直接的解决方案可能是:

    array_sum = lhCounts.nonzeros().stream().mapToDouble(nz -> nz.doubleValue()).sum();
也可以创建一个数组1d。它有一个更丰富的api。然后你可以这样做:

    Array1D<Double> lhCounts1D = Array1D.PRIMITIVE64.makeSparse(dim);
    array_sum = lhCounts1D.aggregateAll(Aggregator.SUM);
如果这个“数组”实际上是2D或N-D,你可以创建一个Array2D或ArrayNyd

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

Array1D、Array2D和ArrayAnyD api:s设计用于致密结构。稍后添加了将它们实例化为稀疏的功能。在稀疏情况下,您可以使用它们执行的某些操作可能不是非常有效。你甚至可以做一些愚蠢的事情,比如
hugesparserray.fillAll(1.0)

建议的SparseArray解决方案给了我一个错误:
error:(85,55)接口org.ojalgo.structure.ElementView1D中的java:method流不能应用于给定的类型;必需:boolean found:无参数原因:实际参数列表和形式参数列表长度不同
Array2D解决方案工作正常:)我确实在代码中的其他地方使用SparseStore 2D数组,所以您认为使用Array2D的稀疏功能更方便吗?性能是否具有可比性?如果发现问题,请在GitHub上打开一个问题,并提供一个示例来演示该问题。一般来说,我认为Array1D和Array2D替代方案更方便,性能更具可比性。
    array_sum = lhCounts1D.nonzeros().stream().mapToDouble(nz -> nz.doubleValue()).sum();
    Array2D<Double> lhCounts2D = Array2D.PRIMITIVE64.makeSparse(dim, dim);
    ArrayAnyD<Double> lhCountsAnyD = ArrayAnyD.PRIMITIVE64.makeSparse(dim, dim, dim, dim);