[Numpy-discussion] Please help - pointer to slice

Todd Miller jmiller at stsci.edu
Sat Mar 8 04:02:01 CST 2003


Sebastian Haase wrote:

>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
>  
>
The numarray-0.4 manual (available at: 
http://prdownloads.sourceforge.net/numpy/numarray-0.4.pdf?download) 
documents how to write Python stubs using the "high level" API on Page 
70.  The thing you appear to be missing is a call to NA_OFFSETDATA which 
gets a pointer to the data in an array by adding the buffer pointer and 
byteoffset together.

Todd

>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
>
>
>
>
>
>-------------------------------------------------------
>This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger 
>for complex code. Debugging C/C++ programs can leave you feeling lost and 
>disoriented. TotalView can help you find your way. Available on major UNIX 
>and Linux platforms. Try it free. www.etnus.com
>_______________________________________________
>Numpy-discussion mailing list
>Numpy-discussion at lists.sourceforge.net
>https://lists.sourceforge.net/lists/listinfo/numpy-discussion
>  
>








More information about the Numpy-discussion mailing list