[Numpy-discussion] Question about flags of fancy indexed array

Travis Oliphant oliphant.travis at ieee.org
Wed May 23 14:12:51 EDT 2007


Albert Strasheim wrote:
> Hello all
>
> Consider the following example:
>
> In [43]: x = N.zeros((3,2))
>
> In [44]: x.flags
> Out[44]:
>   C_CONTIGUOUS : True
>   F_CONTIGUOUS : False
>   OWNDATA : True
>   WRITEABLE : True
>   ALIGNED : True
>   UPDATEIFCOPY : False
>
> In [45]: x[:,[1,0]].flags
> Out[45]:
>   C_CONTIGUOUS : False
>   F_CONTIGUOUS : True
>   OWNDATA : False
>   WRITEABLE : True
>   ALIGNED : True
>   UPDATEIFCOPY : False
>
> Is it correct that the F_CONTIGUOUS flag is set in the case of the fancy 
> indexed x? I'm running NumPy 1.0.3.dev3792 here.
>   

In this case, yes.  When you use fancy-indexing with standard slicing 
(an extension that NumPy added), the implementation uses transposes 
under the covers quite often.   So, you can't rely on the output of 
fancy indexing being a C-contiguous array (even though it won't be 
referring to the same data as the original array). 

So, you are exposing an implementation detail here.  To interface to 
code that requires C-contiguous or F-contiguous data, you have to check 
the flags and make an appropriate copy.

-Travis




More information about the NumPy-Discussion mailing list