使用 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 实现。这很容易做到,并且有一个代码示例。
有没有类似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 实现。这很容易做到,并且有一个代码示例。