[Numpy-discussion] Please help - pointer to slice

Sebastian Haase haase at msg.ucsf.edu
Fri Mar 7 11:27:01 CST 2003


Thanks, SO MUCH ...
I almost went crazy yesterday - and was really desperate by the time I wrote
that email.
Somehow I newer needed that offset field until now.  So: when I do the
NA_InputArray call  I get a "proper" C-array
just that it does NOT necessarily start at  NAimg->data
but rather at
NAimg->data + NAimg->byteoffset

Again: thanks so much.
BTW: Is there general interest in my SWIG typemaps. (SWIG is maybe the
easiest way to wrap C/C++ functions (and classes)
into Python (and/or Perl, Java, Ruby,...) ?  I think especially for
numerical stuff, that "link" in of interest.

Sebastian


----- Original Message -----
From: "Francesc Alted" <falted at openlc.org>
To: "Sebastian Haase" <haase at msg.ucsf.edu>;
<Numpy-discussion at lists.sourceforge.net>
Sent: Thursday, March 06, 2003 9:40 PM
Subject: Re: [Numpy-discussion] Please help - pointer to slice


A Divendres 07 Març 2003 01:42, Sebastian Haase va escriure:
> if I try to debug this by doing:
> for z in range(nz):
>     print repr(arr[z]._data)
>
> that also tells be that python / numarray thinks all slices are located at
> the same address, that is:
> every slice looks just like the full array.

You can access the slices by taking into account the byte offset
attribute. Look at the next example:

In [20]: a=numarray.arange(100, shape=(10,10))

In [21]: a._data
Out[21]: <memory at 083e58e8 with size:400 held by object at 083e58d0>

In [22]: a[1]._data
Out[22]: <memory at 083e58e8 with size:400 held by object at 083e58d0>

as you already know, both memory buffers point to the same address. I guess
this is implemented in that way so as to not copy data unnecessarily.

now, look at:

In [23]: a._byteoffset
Out[23]: 0

In [24]: a[1]._byteoffset
Out[24]: 40

So, you can know where the data actually starts by looking at the
_byteoffset property. In fact, you should always look at it in order to get
proper results!.

In C, you can access to this information by looking at the byteoffset field
in the PyArrayObject struct (look at chapter 10 in the User's Manual).

Hope that helps,

--
Francesc Alted







More information about the Numpy-discussion mailing list