CompRowMatrix
類並非真正用作行向量,而是用於表示稀疏矩陣,以便可以輕鬆地逐行遍歷矩陣元素。
儘管可以將CompRowMatrix
用作向量,但將第一個以外的所有行設置爲零,這對於程序員來說更復雜,而對於假定其他行可能會變得更加有效的代碼非零。
改爲使用DenseVector
對象來保存行向量,並使用Matrix
接口中的mult方法。它接受兩個Vector
對象作爲參數並生成一個向量矩陣乘積。該方法被稱爲矩陣對象有下列參數相乘:
- 月1日阿根廷,
x
,是要與你的矩陣
- 2日阿根廷,
y
乘以向量,持有相乘的結果
所以以產生向量矩陣乘積y = x*A
(其中兩個x
和y
是1
X n
行向量和A
是n
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
中的任何內容。
另請注意,我選擇初始化x
和A
的方式不是唯一可用的方法。例如,上述代碼在構建對應的Vector
和Matrix
對象時自動深度複製陣列vecValues
和matValues
。如果您不打算將數組用於任何其他目的,那麼您可能不應執行此深層副本。您可以通過在構造函數中將額外的布爾參數設置爲false來完成此操作,例如
// create matrix A without deep copying matValues
Matrix A = new DenseMatrix(matValues, false);
你應該參考javadoc你和我之前鏈接到更多的構造函數選項。然而,請注意,javadoc的版本與當前版本的MTJ(版本1.01截至本文發佈時)不同。我不知道它是哪個版本,也不是我能夠找到當前版本的javadoc,但我確實發現了它與current source code之間的一些差異。