Francesc Altet wrote:
Hi,
I'm a bit lost with the next example:
In [28]: from numarray import * In [29]: a=arange(10) In [30]: a.iscontiguous() Out[30]: 1 In [31]: b=a[::2] In [32]: b.iscontiguous() Out[32]: 0
That seems to suggest that b shares the same data buffer than a. Indeed:
In [36]: a._data Out[36]: <memory at 0x082494d8 with size:0x00000028 held by object 0xb762c260 aliasing object 0x00000000> In [37]: b._data Out[37]: <memory at 0x082494d8 with size:0x00000028 held by object 0xb762c260 aliasing object 0x00000000>
OK so far.
At this point, I believe that _bytestride should be different on both arrays, but:
In [33]: a._bytestride Out[33]: 4 In [34]: b._bytestride Out[34]: 4
while I expected to find b._bytestride equal to 8.
Is that an error or a lack of understanding on my part?
What you are looking for is _strides. Since, in general, arrays can be multidimensional, the stride(s) need to be specified as a sequence. _bytestride appears to be equivalent to itemsize(); that is, it tells how many bytes are required to represent one item of the array. Here's what strides looks like in your case:
a._strides
(4,)
b._strides
(8,)
Hope that helps,
-tim
Cheers,