【问题标题】:creating a row vector in java matrix toolkit (MTJ)在 java 矩阵工具包 (MTJ) 中创建行向量
【发布时间】:2011-04-28 14:34:39
【问题描述】:

我需要实现一个乘法公式,其中一个大小为“n”的行矩阵要乘以一个 n*n 矩阵..

我使用 DenseMatrix 类从二维数组创建 n*n 矩阵...但我的问题是如何创建行向量...

我可以使用 CompRowMatrix 类来创建一个行矩阵...但是为此,输入必须是'Matrix'..但是 Matrix 是一个接口..不能实例化它..@987654321 的第一个构造函数@ 声明它需要一个“非零索引数组”作为输入..但我无法理解这个非零索引数组是什么??

另外,我可以使用 DenseVector 或任何其他合适的类创建一个向量..但似乎没有方法可以直接将向量与矩阵相乘..

请帮忙

【问题讨论】:

    标签: java vector matrix-multiplication mtj


    【解决方案1】:

    CompRowMatrix 类并不是真正打算用作行向量,而是用于表示稀疏矩阵,以便于逐行迭代矩阵元素。

    虽然可以通过将除第 1 行以外的所有行设置为零来将 CompRowMatrix 用作向量,但这对程序员来说更复杂,并且对于必须假设其他行可能的代码效率较低变为非零。

    改为使用DenseVector 对象来保存行向量,并使用Matrix 接口中的mult 方法。它接受两个Vector 对象作为参数并产生一个向量矩阵乘积。该方法在与以下参数相乘的矩阵对象上调用:

    • 第一个参数 x 是您要与矩阵相乘的向量
    • 第二个参数,y,保存乘法的结果

    所以要生成向量矩阵乘积y = x*A(其中xy 都是1xnrow 向量,Anxn 矩阵),你会做这样的事情:

    // create matrix A
    double[][] matValues = new double[n][n];
    ... // initialize values of the matrix
    Matrix A = new DenseMatrix(matValues);
    
    // create vector x
    double[] vecValues = new double[n];
    ... // initialize values of the vector
    Vector x = new DenseVector(vecValues);
    
    // create vector y to store result of multiplication
    Vector y = new DenseVector(n);
    
    // perform multiplication
    A.mult(x, y);
    

    现在您可以根据需要在其余代码中使用y。在乘法之前分配y 很重要,但这与它保存的数据无关。 mult 方法将在退出时覆盖 y 中的任何内容。

    另外请注意,我选择初始化xA 的方法并不是唯一可用的方法。例如,上面的代码在构造相应的VectorMatrix 对象时,会自动深度复制数组vecValuesmatValues。如果您不打算将数组用于任何其他目的,那么您可能不应该执行此深层复制。您可以通过在构造函数中传递一个设置为 false 的额外布尔参数来做到这一点,例如

    // create matrix A without deep copying matValues
    Matrix A = new DenseMatrix(matValues, false);
    

    您应该参考您和我之前链接到的 javadoc 以获得更多构造函数选项。但是请注意,上述 javadoc 是针对与当前版本的 MTJ 不同的版本(截至本文发布时的版本 1.01)。我不知道它适用于哪个版本,也无法找到当前版本的 javadoc,但我确实发现了它与 current source code 之间的一些差异。

    【讨论】:

      【解决方案2】:

      如果我理解您的问题,一种解决方案是创建一个包含一行和 n 列的矩阵来预乘 n x n 矩阵。有乘法向量的例程,但我相信它们都有向量后乘矩阵。如果您想改用这些例程,则必须进行适当的转置。

      【讨论】:

        猜你喜欢
        • 2016-01-16
        • 1970-01-01
        • 2012-09-04
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多