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