Добавление матриц и векторов в параллельном кольте

В 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); 
Другие вопросы по тегам