该类CompRowMatrix
并不是真正打算用作行向量,而是用于以一种易于逐行迭代矩阵元素的方式表示稀疏矩阵。
虽然可以CompRowMatrix
通过将除第一行以外的所有行设置为零来用作向量,但这对程序员来说更复杂,并且对于必须假设其他行可能变为非零的代码来说效率较低。
相反,使用一个DenseVector
对象来保存您的行向量并使用界面中的mult方法。Matrix
它接受两个Vector
对象作为参数并产生一个向量矩阵乘积。在与以下参数相乘的矩阵对象上调用该方法:
- 第一个参数,
x
, 是要与矩阵相乘的向量
- 第二个参数,
y
, 保存乘法的结果
因此,要生成向量矩阵乘积y = x*A
(其中x
和y
都是1
xn
行向量并且A
是n
xn
矩阵),您可以执行以下操作:
// 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
退出时的任何内容。
另请注意,我选择初始化的x
方式A
并不是唯一可用的方式。例如,上面的代码在构造对应的 和 对象时会自动深度复制数组和vecValues
对象。如果您不打算将数组用于任何其他目的,那么您可能不应该执行此深层复制。您可以通过在构造函数中传递一个额外的布尔参数设置为 false 来做到这一点,例如matValues
Vector
Matrix
// create matrix A without deep copying matValues
Matrix A = new DenseMatrix(matValues, false);
您应该参考您和我之前链接到的 javadoc 以获得更多构造函数选项。但是请注意,上述 javadoc 是针对与当前版本的 MTJ 不同的版本(截至本文发布时的版本 1.01)。我不知道它适用于哪个版本,也无法找到当前版本的 javadoc,但我确实发现了它与当前源代码之间的一些差异。