2013-06-05 54 views
1

在Parallel Colt中,如何向矩陣的每一行添加一個向量,最好是在原地?特別是,我有一個DoubleMatrix1D,我想添加到DoubleMatrix2D的每一行。看起來這應該是直截了當的,但從Javadoc中並不清楚。 (我當然可以用手工完成,但似乎很奇怪,沒有這種能力可以建成)。在Parallel Colt中添加矩陣和向量

+0

我認爲你應該多指定一點:例如你正在使用什麼樣的對象。 – fpe

+0

@fpe:更新了我正在使用的特定類型。 –

回答

2

所以,一個m維向量(比如,aVector)添加到n×m的矩陣(比如,aMatrix)的第i行,你需要做到以下幾點:

// new matrix where each row is the vector you want to add, i.e., aVector 
DoubleMatrix2D otherMatrix = DoubleFactory2D.sparse.make(aVector.toArray(), n); 
DoubleDoubleFunction plus = new DoubleDoubleFunction() { 
    public double apply(double a, double b) { return a+b; } 
}; 
aMatrix.assign(otherMatrix, plus);  

的API表示,這對assign方法:

assign(DoubleMatrix2D y, DoubleDoubleFunction function) 
    Assigns the result of a function to each cell; x[row,col] = function(x[row,col],y[row,col]). 

我沒有測試過DoubleFactory2D#make()方法嘍。如果它創建了一個矩陣,其中aVector作爲列合併到otherMatrix中的行中,然後在使用assign()步驟之前使用DoubleAlgebra#transpose()獲取轉置。

編輯

有你想改變只有一個特定的(比如,第i)行加入就地一排,在案件的一個更簡單的方法:

aMatrix.viewRow(i).assign(aVector);