[Numpy-discussion] Non-contiguous array from newaxis indexing

Travis Oliphant oliphant.travis at ieee.org
Sat Aug 18 06:51:53 EDT 2007


Jens Jørgen Mortensen wrote:
> I would like all these arrays to be contiguous:
> 
>>>> import numpy as npy
>>>> npy.__version__
> '1.0.4.dev3967'
>>>> x = npy.arange(4)
>>>> y = x[npy.newaxis, :]
>>>> z = x.reshape((1, 4))
>>>> for a in [x, y, z]:
> ...     print a.shape, a.strides, a.flags.contiguous
> ... 
> (4,) (4,) True
> (1, 4) (0, 4) False
> (1, 4) (16, 4) True
> 
> But y is not contiguous according to y.flags.contiguous - why not and
> why does y and z not have the same strides?
> 
> I f

We've tried a few times to let them be contiguous, but it breaks code in 
various ways because NumPy takes advantage of 0-striding to accomplish 
broadcasting.   In theory, it might be able to be fixed, but the fact 
that simple fixes don't work makes me wonder.


ound this comment just before the _IsContiguous function in
> arrayobject.c:
> 
> /* 0-strided arrays are not contiguous (even if dimension == 1) */
> 
> Is this correct?

Yes.

-Travis



More information about the NumPy-Discussion mailing list