2013-06-05 3 views
1

В Parallel Colt, как добавить вектор в каждую строку матрицы, желательно на месте? В частности, у меня есть DoubleMatrix1D, который я бы хотел добавить к каждой строке DoubleMatrix2D. Похоже, это должно быть просто, но это не ясно из Джавадока. (Я, конечно, могу сделать это вручную, но кажется странным, что такая возможность не будет построена).Добавление матриц и векторов в Parallel Colt

+0

I подумайте, что вы должны указать немного больше: например, какие объекты вы используете в настоящее время. – fpe

+0

@fpe: обновлен с конкретными типами, которые я использую. –

ответ

2

Таким образом, чтобы добавить т-мерный вектор (скажем, 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().

EDIT

Существует гораздо более простой способ добавления строки в месте, в случае, если вы хотите изменить только определенные (скажем, я-й) строки:

aMatrix.viewRow(i).assign(aVector); 
Смежные вопросы