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
