Добавление матриц и векторов в параллельном кольте
В Parallel Colt, как добавить вектор в каждую строку матрицы, предпочтительно на месте? В частности, у меня есть DoubleMatrix1D, который я хотел бы добавить к каждой строке DoubleMatrix2D. Кажется, что это должно быть просто, но это не ясно из Javadoc. (Конечно, я могу сделать это вручную, но странно, что такая возможность не будет встроена).
1 ответ
Итак, чтобы добавить m-мерный вектор (скажем, aVector
) к i-й строке матрицы nxm (скажем, aMatrix
), вам нужно будет сделать следующее:
// 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);