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

Travis Oliphant oliphant.travis at ieee.org
Tue Mar 28 18:20:03 EST 2006


Zachary Pincus wrote:
> Uh oh,
>
> Just updated to new numpy so that dot() wouldn't be broken. What fun 
> to play with the new order/ravel/reshape stuff.
>
> Unfortunately, the ravel/reshape methods seem to not be quite worked 
> out properly yet. Basically (and as expected) the ravel method doesn't 
> work anymore on fortran-strided arrays. But since fortran-strided 
> arrays happen *all-the-time* (e.g. after a transpose operation), 
> things get confusing fast.
>

You've demonstrated my biggest concern with adopting Tim's approach.   
Because you can very easily get arrays that are not C-contiguous, you 
end up with a stituation in which the reshape and ravel methods are not 
very useful in my mind.

> In fact, absolutely no reshape operation (other than the identity 
> reshape) will work on fortran-strided arrays (see below). Also, the 
> errors could be more helpful, and anyway ravel shouldn't fail with an 
> error about reshape fortran-strided.
There is one more problem with what I checked in.  The PyArray_Ravel() 
function in C is now completely different and is used in _check_axis and 
therefore creates a segfault.

So, I've decided to compromise. 

.reshape  maintains it's view-only behavior

.ravel()  goes back to copy-if-necessary behavior (If you don't like it 
then use .reshape(-1) ).

This should fix most of Zach's concerns and also fixes the segfault you 
get with

rand(10,3).transpose().sum()

-Travis





More information about the NumPy-Discussion mailing list