On Fri, Jul 18, 2014 at 2:03 AM, Sebastian Berg <sebast...@sipsolutions.net> wrote:
> On Do, 2014-07-17 at 09:48 -0400, Robert Lupton the Good wrote: > > Having just re-read the PEP I'm concerned that this proposal leaves at > least one major (?) trap for naive users, namely > > x = np.array([1, 10]) > > print X.T@x > > which will print 101, not [[1, 10], [10, 100]] > > > > Yes, I know why this is happening but it's still a problem -- the user > said, "I'm thinking matrices" when they wrote @ but the x.T had done the > "wrong" thing before the @ kicked in. And yes, a savvy user would have > written x = np.ones([[1, 10]]) (but then np.dot(x, x.T) isn't a scalar). > > > > This is the way things are at present, but with the new @ syntax coming > in I think we should consider fixing it. > > > > I can think of three possibilities: > > 1. Leave this as a trap for the unwary, and a reason for people to > stick to np.matrix (np.matrix([1, 10]) behaves "correctly") > > 2. Make x.T a syntax error for 1-D arrays. It's a no-op and IMHO > a trap. > > 3. Make x.T promote the shape == (2,) array to (1, 2) and return a > (2, 1) array. This may be too magic, but it's my preferred solution. > > > > Making it a warning may be another option. Changing `.T` to promote to > 2-d (also maybe to actually only transpose the last two axes for higher > D arrays), could be nice, but getting there might take quite a long > FutureWarning or even Error -> new feature cycle... > I've toyed some with the idea of adding a flag bit for transpose of 1-d arrays. It would flip with every transpose and be ignored for non 1-d arrays. A bit of a hack, but would allow for a column/row vector distinction. Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion