Great! It looks like it is in fact working as desired: In [4]: cube.shape Out[4]: (5, 4096, 4096)
In [5]: slice = cube[0] In [6]: cube[0,1000,1000] Out[6]: 618 In [7]: slice[1000,1000] Out[7]: 618 In [8]: slice[1000,1000] = 123 In [9]: cube[0, 1000,1000] Out[9]: 123 I didn't know about the .base attribute; that is really useful. Thank you both for the feedback. Keith On Wed, Aug 17, 2011 at 1:46 PM, Aronne Merrelli <[email protected]>wrote: > > > On Wed, Aug 17, 2011 at 9:04 AM, Keith Hughitt <[email protected]>wrote: > >> >> Also, when subclassing ndarray and calling obj = data.view(cls) for an >> ndarray "data", does this copy the data into the new object by value or >> reference? The method which extracts the 2d slice actually returns a >> subclass of ndarray created using the extracted data, so this is why I ask. >> >> >> > I think it should pass a reference - the following code suggests the > subclass is sharing the same fundamental array object. You can use the .base > attribute of the ndarray object to see if it is a view back to another > ndarray object: > > import numpy as np > class TestClass(np.ndarray): > def __new__(cls, inp_array): > return inp_array.view(cls) > > In [2]: x = np.ones(5) > In [3]: obj = TestClass(x) > In [4]: id(x), id(obj), id(obj.base) > Out[4]: (23517648, 19708080, 23517648) > In [5]: print x, obj > [ 1. 1. 1. 1. 1.] [ 1. 1. 1. 1. 1.] > In [6]: x[2] = 2 > In [7]: print x, obj > [ 1. 1. 2. 1. 1.] [ 1. 1. 2. 1. 1.] > > > If you change the TestClass.__new__() to: "return > np.array(inp_array).view(cls)" then you will make a copy of the input array > instead, if that is needed. In that case, it looks like the .base attribute > is a new ndarray, copied from the input array. > > > Aronne > > [PS - also note that .base is set to None, if the ndarray is not a view > into another ndarray; it turns out that None has a valid object number, > which confused me at first - see id(None).] > > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion > >
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
