# Multiplying elements in a sparse array with rows in matrix

Unfortunatly the `.multiply`

method of the CSR matrix seems to densify the matrix if the other one is dense. So this would be one way avoiding that:

```
# Assuming that Y is 1D, might need to do Y = Y.A.ravel() or such...
# just to make the point that this works only with CSR:
if not isinstance(X, scipy.sparse.csr_matrix):
raise ValueError('Matrix must be CSR.')
Z = X.copy()
# simply repeat each value in Y by the number of nnz elements in each row:
Z.data *= Y.repeat(np.diff(Z.indptr))
```

This does create some temporaries, but at least its fully vectorized, and it does not densify the sparse matrix.

For a COO matrix the equivalent is:

```
Z.data *= Y[Z.row] # you can use np.take which is faster then indexing.
```

For a CSC matrix the equivalent would be:

```
Z.data *= Y[Z.indices]
```