[Numpy-discussion] Re: reshape and ravel methods of arrays now return views or raise error

Tim Hochberg tim.hochberg at cox.net
Tue Mar 28 22:27:05 CST 2006

```Robert Kern wrote:

>Charles R Harris wrote:
>
>
>>On 3/28/06, *Zachary Pincus* <zpincus at stanford.edu
>><mailto:zpincus at stanford.edu>> wrote:
>>
>>    Let me give a more concrete example, pulled from some code I was
>>    actually using.
>>
>>    The code is obviously a bit flawed, but it worked fine with numpy up
>>    until today. Now it breaks when a and b aren't both c-strided:
>>    def distance_squared(a, b):
>>         return numpy.sum( (a.ravel() - b.ravel())**2 )
>>
>>def distance_squared(a,b)
>>    return ((a - b)**2).sum()
>>
>>The function should probably throw an error if a and b don't have the
>>same shape and order and now it does.
>>
>>
>
>Does it?
>
>In [55]: def distance_squared(a, b):
>   ....:     return ((a - b) ** 2).sum()
>   ....:
>
>In [56]: distance_squared(arange(5), arange(3)[:,newaxis])
>Out[56]: 55
>
>
Right. It will work with any two arrays that can be broadcast to the
same shape. Given numpy's rules, that's arguably the right thing to do
in general although whether it's the right thing to do here depends on
the specific application, which I don't know.

Still, this is almost certainly better than the original case, which
will blithely compute the distance_squared for any two arrays with the
same total size. Then again, it's possible that's what the author really
wanted. Unlikely, I think, but possible.

Regards,

-tim

```