vector_scale_inplace
parent
c1f50a0637
commit
71089a6354
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue