[Numpy-discussion] numpy reference array

Matt U mpuecker@mit....
Wed Mar 13 08:56:07 CDT 2013


Is it possible to create a numpy array which points to the same data in a
different numpy array (but in different order etc)?

For example:

Code: 
------------------------------------------------------------------------------
import numpy as np
a = np.arange(10)
ids = np.array([0,0,5,5,9,9,1,1])
b = a[ids]
a[0] = -1
b[0] #should be -1 if b[0] referenced the same data as a[0]
    0
------------------------------------------------------------------------------

ctypes almost does it for me, but the access is inconvenient. I would like to
access b as a regular numpy array:

Code: 
------------------------------------------------------------------------------
import numpy as np
import ctypes
a = np.arange(10)
ids = np.array([0,0,5,5,9,9,1,1])
b = [a[id:id+1].ctypes.data_as(ctypes.POINTER(ctypes.c_long)) for id in ids]
a[0] = -1
b[0][0] #access is inconvenient
    -1
------------------------------------------------------------------------------
Some more information: I've written a finite-element code, and I'm working on
optimizing the python implementation. Profiling shows the slowest operation is
the re-creation of an array that extracts edge degrees of freedom from the
volume of the element (similar to b above). So, I'm trying to avoid copying the
data every time, and just setting up 'b' once. The ctypes solution is
sub-optimal since my code is mostly vectorized, that is, later I'd like to
something like

Code:
------------------------------------------------------------------------------
c[ids] = b[ids] + d[ids]
------------------------------------------------------------------------------

where c, and d are the same shape as b but contain different data.

Any thoughts? If it's not possible that will save me time searching.



More information about the NumPy-Discussion mailing list