微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ojalgo中的稀疏矩阵分解

如何解决ojalgo中的稀疏矩阵分解

我想用ojalgo进行最小二乘调整。 问题是我的Designmatrix非常大(超过100kx100k),但是非常稀疏。 用ojalgo建立庞大的稀疏矩阵是没有问题的。还要做一些基本的数学运算。 当我从SparseStore矩阵创建QR对象时,似乎SparseStore矩阵信息被忽略,而qr对象被初始化为2D-DenseMatrix对象。 当然,我的系统内存不足。

是否有可能进行qr(或其他)操作以保持SparseStore。

感谢您的帮助,

最好, 罗尼

代码

package matrixTest;
import static org.ojalgo.type.CalendarDateUnit.*;

import java.util.Random;

import org.ojalgo.OjAlgoUtils;
import org.ojalgo.array.LongToNumberMap;
import org.ojalgo.array.Primitive64Array;
import org.ojalgo.array.SparseArray;
import org.ojalgo.matrix.decomposition.QR;
import org.ojalgo.matrix.store.MatrixStore;
import org.ojalgo.matrix.store.SparseStore;
import org.ojalgo.matrix.task.iterative.ConjugateGradientSolver;
import org.ojalgo.netio.BasicLogger;
import org.ojalgo.series.BasicSeries;
import org.ojalgo.type.Stopwatch;

/**
 * Example use of SparseStore and other special MatrixStore implementations.
 *
 * @see https://www.ojalgo.org/2020/09/sparse-and-special-structure-matrices/
 * @see https://github.com/optimatika/ojAlgo/wiki/Sparse-Matrices
 */
public class SparseMatrices {

    private static String NON_ZEROS = "{} non-zeroes out of {} matrix elements calculated in {}";
    private static Random RANDOM = new Random();

    public static void main(final String[] args) {

        BasicLogger.debug();
        BasicLogger.debug(SparseMatrices.class);
        BasicLogger.debug(OjAlgoUtils.getTitle());
        BasicLogger.debug(OjAlgoUtils.getDate());
        BasicLogger.debug();

        int dim = 100_000;

        SparseStore<Double> mtrxD = SparseStore.PRIMITIVE64.make(dim,dim);

        for (int j = 0; j < dim; j++) {
            double val = RANDOM.nextDouble();
            mtrxD.set(j,j,val);
        } // Each column of B contains 1 non-zero element at random row

        QR<Double> decompQR = QR.PRIMITIVE.make(mtrxD);

        
        stopwatch.reset();
        decompQR.compute(mtrxD);
        BasicLogger.debug("Sparse Identity decomposed (QR) in {}",stopwatch.stop());

    }

}

解决方法

当前没有保留稀疏性的矩阵分解。

不确定您需要什么还是ojAlgo中到底有什么。您可以乘以转置矩阵然后使用迭代求解器吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。