[SciPy-User] Notification when array is modified
John Jumper
jumper at uchicago.edu
Mon Aug 20 03:00:04 EDT 2012
I am looking for a method so that I can be notified when the contents
of a numpy array change.
A simplified class that illustrates the desired functionality is below.
class ComputeDerived(object):
def __init__(self, n):
self.A = np.zeros(n)
self.B = np.zeros(n)
self.change_mask = np.ones(n, dtype=np.bool)
self._Derived = expensive(self.A,self.B)
def set_A(self, i, x):
self.A[i] = x
self.change_mask[i] = True
def set_B(self, i, x):
self.B[i] = x
self.change_mask[i] = True
def Derived(self):
if np.any(self.change_mask):
for i in np.nonzero(self.change_mask)[0]:
self._Derived[i] = expensive(A[i],B[i])
self.change_mask[:] = False
return self._Derived
This class works, but I lack the power of numpy's indexing syntax to
change A or B. I would like to be able to write
compute_derived.A[(3,5,6)] = 1 and then be notified that A has
changed. Otherwise, if I want to use a numpy interface for A and B, I
would have to store old copies of A and B and traverse these copies
every time Derived is called.
Is there any interface in numpy so that I could expose A and B
directly as writeable numpy arrays but be notified when they are
modified? Alternatively, if I subclass ndarray, is there some
exhaustive list of methods that can change the underlying data (I
would be worried about view objects here)?
In case it makes a difference, my actual use case is a C++ class
wrapped using Boost::Python. The numpy arrays A and B would point at
aligned float* members of my C++ class.
Thank you,
John Jumper
More information about the SciPy-User
mailing list