# The NumPy Fortran-ordering quiz

A. M. Archibald peridot.faceted at gmail.com
Wed Oct 18 00:57:30 CDT 2006

```On 17/10/06, Travis Oliphant <oliphant.travis at ieee.org> wrote:
> Charles R Harris wrote:
> >
> > In [3]: array([[1,2,3,4,5,6]]).reshape((3,2),order='F')
> > Out[3]:
> > array([[1, 4],
> >        [2, 5],
> >        [3, 6]])
> >
> > I also don't understand why a copy is returned if 'F' just fiddles
> > with the indices and strides; the underlying data should be the same,
> > just the view changes. FWIW, I think both examples should be returning
> > views.
>
> You are right, it doesn't need to.   My check is not general enough.
>
> It can be challenging to come up with a general way to differentiate the
> view-vs-copy situation and I struggled with it.  In this case, it's the
> fact that while self->nd > 1, the other dimensions are only of shape 1
> and so don't really matter.   If you could come up with some kind of
> striding check that would distinguish the two cases, I would appreciate it.

I wrote, just for exercise I guess, a routine that checks to see if a
copy is needed for a reshape (and if not, it computes the resulting
strides) for an arbitrary array. (It currently only does a C-order
reshape, but F-order would be an easy addition.) It does, however,
successfully handle arbitrarily strided arrays with arbitrary
arrangements of "1" dimensions having arbitrary strides. I think it
also correctly handles 0 strides. I don't imagine you'd want to *use*
it, but it does provide a complete solution to copy-less reshaping.

I'd be happy to help with the C implementation built into numpy, but
for the life of me I can't figure out how it works.

A. M. Archibald

P.S. I haven't written down a *proof* that this implementation never
copies unnecessarily, but I'm pretty sure that it doesn't. It has a
reshape_restricted that effectively does a ravel() first; this can't
cope with things like length (5,2,3) -> length (5,3,2) unless the
strides are conveniently equal, so there's a wrapper, reshape(), that
breaks the reshape operation up into pieces that can be done by
reshape_restricted. -AMA
-------------- next part --------------
A non-text attachment was scrubbed...
Name: stride.py
Type: text/x-python
Size: 2233 bytes
Desc: not available
Url : http://projects.scipy.org/pipermail/numpy-discussion/attachments/20061018/501a3613/attachment-0001.py
-------------- next part --------------
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier