使用 ojalgo 创建对角矩阵的最有效方法是什么?

What's the most efficient way to create a diagonal matrix with ojalgo?

有没有类似Primitive64Matrix.FACTORY.makeDiagonal(double...)的东西?我找不到类似的东西 https://www.ojalgo.org/code-examples/

我希望不要这样做 Primitive64Matrix.FACTORY.rows(new double[][]{{1, 0, 0}, {0, 2, 0}, {0, 0, 5}}) 因为那没有利用对角矩阵的稀疏结构,因此对于大矩阵来说计算效率似乎很低。

不,不是那样直接。您可以创建一个稀疏矩阵,然后只设置对角线:

    SparseReceiver sparseReceiver = Primitive64Matrix.FACTORY.makeSparse(3, 3);

    sparseReceiver.fillDiagonal(3.14);

    Primitive64Matrix matrix = sparseReceiver.get();

使用 MatrixStore:s 有一个 DiagonalStore 实现。它可能是最接近您正在寻找的东西,但实例化并不是很“直接”。你必须这样做:

    DiagonalStore<Double, Primitive64Array> diagonalStore = DiagonalStore.builder(Primitive64Store.FACTORY, Primitive64Array.wrap(3.14, 3.14, 3.14)).get();

    DiagonalStore<Double, Primitive64Array> diagonalStore = Primitive64Store.FACTORY.makeDiagonal(Primitive64Array.wrap(3.14, 3.14, 3.14)).get();

... 或者您只是创建自己的 MatrixStore 实现。这很容易做到,并且有一个代码示例。