vector_scale_inplace

release/4.3a0
Frank Dellaert 2010-02-24 06:12:56 +00:00
parent c1f50a0637
commit 71089a6354
2 changed files with 12 additions and 8 deletions

View File

@ -802,18 +802,21 @@ return collect(matrices);
}
/* ************************************************************************* */
// row scaling
Matrix vector_scale(const Vector& v, const Matrix& A) {
Matrix M(A);
// row scaling, in-place
void vector_scale_inplace(const Vector& v, Matrix& A) {
size_t m = A.size1(); size_t n = A.size2();
for (size_t i=0; i<m; ++i) { // loop over rows
double vi = v(i);
//double vi = *(v.data().begin()+i); // not really an improvement
for (size_t j=0; j<n; ++j) { // loop over columns
double * Mptr = M.data().begin() + i*n + j;
(*Mptr) = (*Mptr) * vi;
}
double *Aij = A.data().begin() + i*n;
for (size_t j=0; j<n; ++j, ++Aij) (*Aij) *= vi;
}
}
/* ************************************************************************* */
// row scaling
Matrix vector_scale(const Vector& v, const Matrix& A) {
Matrix M(A);
vector_scale_inplace(v, M);
return M;
}

View File

@ -306,6 +306,7 @@ Matrix collect(size_t nrMatrices, ...);
* Arguments (Matrix, Vector) scales the columns,
* (Vector, Matrix) scales the rows
*/
void vector_scale_inplace(const Vector& v, Matrix& A); // row
Matrix vector_scale(const Vector& v, const Matrix& A); // row
Matrix vector_scale(const Matrix& A, const Vector& v); // column