# [petsc-users] Multiplying a row-vector to each row in a dense matrix, sliced or full

Roland Richter roland.richter at ntnu.no
Tue Dec 8 16:16:29 CST 2020

```Yes, that would be exactly what I need, I have not thought about that
possibility, thanks!

Concerning slicing: Assumed my matrix A and vector v are defined by

A = |a b|
|c d|
v = |w x y z|

After v is larger than the row size of A, I only can take some elements
for multiplication and therefore I have to use only a slice of vector v:

A*v[1:2] =  |xa yb|
|xc yd|

or

A*v[0:1] =    |wa xb|
|wc xd|

How could I do that?

Thanks,

Roland

Am 08.12.2020 um 19:26 schrieb Matthew Knepley:
> On Tue, Dec 8, 2020 at 1:13 PM Roland Richter <roland.richter at ntnu.no
> <mailto:roland.richter at ntnu.no>> wrote:
>
>     Hei,
>
>     I would like to multiply a row-vector to each row in a dense matrix,
>     either full or sliced (i.e. if the row-vector is larger than the row
>     length of the matrix). Armadillo offers a each_row()-function, where I
>     can iterate over all rows in a matrix and multiply the vector to them
>     (similar to the operation VecPointwiseMult()). Is there a similar
>     operation in PETSc? Ideally with the option of only multiplying a
>     part/slice of the row vector to each row, if the corresponding row of
>     the target matrix is shorter than the initial row vector.
>
>
> It helps to write in linear algebra notation so that we can be sure we
> are talking
> about the same thing. Say we have the matrix A and vector v
>
>   A = / a b \  v = <m, n>
>         \ c d /
>
> and you want
>
>   A * m = / ma nb \ = / a b \ / m 0 \ = A . diag(v)
>                \ mc nd /    \ c d /  \ 0  n /
>
> which you can get
> using https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatDiagonalScale.html
> <https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/Mat/MatDiagonalScale.html>
>
> is that what you want? I do not have a clear picture of what you want
> slicing for.
>
>   Thanks,
>
>      Matt
>
>
>     Thanks,
>
>     Roland
>
>
>
> --
> What most experimenters take for granted before they begin their
> experiments is infinitely more interesting than any results to which