gpt4 book ai didi

java - 在java矩阵工具包(MTJ)中创建行 vector

转载 作者:行者123 更新时间:2023-12-01 16:39:14 24 4
gpt4 key购买 nike

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

我使用 DenseMatrix 类从 2D 数组创建 n*n 矩阵...但我的问题是如何创建行 vector ...

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

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

请帮忙

最佳答案

CompRowMatrix类并不是真正要用作行 vector ,而是用于表示稀疏矩阵,以便可以轻松地逐行迭代矩阵元素。

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

相反,请使用 DenseVector对象来保存行 vector 并使用 mult方法来自Matrix界面。它接受两个 Vector对象作为参数并生成 vector 矩阵乘积。该方法在与以下参数相乘的矩阵对象上调用:

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

因此生成 vector 矩阵乘积 y = x*A (其中 xy 都是 1 x n 行 vector ,而 An x n 矩阵),您可以执行以下操作:

// 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这并不是唯一可用的方法。例如,上面的代码自动深度复制数组 vecValuesmatValues构造相应的Vector时和Matrix对象。如果您不打算将数组用于任何其他目的,那么您可能不应该执行此深度复制。您可以通过在构造函数中传递一个设置为 false 的额外 boolean 参数来完成此操作,例如

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

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

关于java - 在java矩阵工具包(MTJ)中创建行 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5820296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com