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

Jens Jørgen Mortensen jensj at fysik.dtu.dk
Wed Aug 22 05:36:21 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.

OK, then how about giving y the strides (16, 4) like z?  Then
_IsContiguous() will say thay y is contiguous.  Will that break any code?

I can take a look at how to fix the strides for newaxis-indexed arrays if
this is way to go.

Jens Jørgen

> 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
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion at scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
>





More information about the NumPy-Discussion mailing list