On Fri, Jul 18, 2014 at 9: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...

Hmm, just the other day I wrote some code that relies on the current
behavior. I was writing a function that could work both on 3-vectors
and arrays of 3-vectors. To unpack the input into the separate
components, I did:

  x, y, z = vector.T

Which works correctly whether `vector` is shaped (3,) or (N, 3).

-- 
Robert Kern
_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to