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

View File

@ -306,6 +306,7 @@ Matrix collect(size_t nrMatrices, ...);
* Arguments (Matrix, Vector) scales the columns, * Arguments (Matrix, Vector) scales the columns,
* (Vector, Matrix) scales the rows * (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 Vector& v, const Matrix& A); // row
Matrix vector_scale(const Matrix& A, const Vector& v); // column Matrix vector_scale(const Matrix& A, const Vector& v); // column