在Parallel Colt中添加矩阵和向量

时间:2013-06-05 16:38:12

标签: java matrix colt

在Parallel Colt中,如何向矩阵的每一行添加一个向量,最好是就地?特别是,我有一个DoubleMatrix1D我想添加到DoubleMatrix2D的每一行。看起来这应该是直截了当的,但是Javadoc并不清楚。 (我当然可以手工完成,但似乎没有内置的这种能力。)

1 个答案:

答案 0 :(得分:2)

因此,要将m维向量(例如,aVector)添加到nxm矩阵的第i行(例如,aMatrix),您需要执行以下操作: / p>

// 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中的行,则在使用DoubleAlgebra#transpose()步骤之前使用assign()进行转置。

修改

有一种更简单的方法可以就地添加行,以防您只想更改特定的(例如,第i行)行:

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