On Wed, Jun 3, 2015 at 2:25 PM, Stephan Hoyer <[email protected]> wrote:

> On Sat, May 30, 2015 at 3:23 PM, Charles R Harris <
> [email protected]> wrote:
>
>> The problem arises when multiplying a stack of matrices times a vector.
>> PEP465 defines this as appending a '1' to the dimensions of the vector and
>> doing the defined stacked matrix multiply, then removing the last dimension
>> from the result. Note that in the middle step we have a stack of matrices
>> and after removing the last dimension we will still have a stack of
>> matrices. What we want is a stack of vectors, but we can't have those with
>> our conventions. This makes the result somewhat unexpected. How should we
>> resolve this?
>>
>
> I'm afraid I don't quite understand the issue. Maybe a more specific
> example of the shapes you have in mind would help? Here's my attempt.
>
> Suppose we have two arrays:
> a with shape (i, j, k)
> b with shape (k,)
>
> Following the logic you describe from PEP465, for a @ b we have shapes
> transform like so:
> (i, j, k,) @ (k, 1) -> (i, j, 1) -> (i, j)
>
> This makes sense to me as a stack of vectors, as long as you are imagining
> the original stack of matrices as along the first dimension. Which I'll
> note is the default behavior for the new np.stack (
> https://github.com/numpy/numpy/pull/5605).
>

Yes, you end up with a stack of vectors, but matmul will interpret them as
a stack of matrices. I decided there is nothing to be done there and just
documented it as a potential gotcha. The other possibility would be to
prohibit or warn on stacked matrices and vectors for the `@` operator and
that might limit what some folks want to do.

Chuck
_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to