For example:

- Code: Select all
`>>> 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:

- Code: Select all
`>>> 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: Select all
`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.