On Tue, Feb 28, 2012 at 5:12 PM, Larsen, Brian A <balar...@lanl.gov> wrote: > Stack overflow post related to this: > http://stackoverflow.com/questions/9164269/can-you-tell-if-an-array-is-a-view-of-another
They recommend testing "a.base". However, in the example I posted, "a.base" is not reliable either. For example: In [5]: a = zeros((3,3)) In [6]: a_fancy1 = a[[0,1], :] In [7]: a_fancy1.base # None In [8]: a_fancy2 = a[:, [0,1]] In [9]: a_fancy2.base # Not None. But a_fancy2 is not a view into 'a'. Out[9]: array([[ 0., 0., 0.], [ 0., 0., 0.]]) So if I test to see if 'arr.base' is not None, it may or or may not be a view. Is this correct? > > > > > On Feb 28, 2012, at 4:01 PM, Kurt Smith wrote: > > For an arbitrary numpy array 'a', what does 'a.flags.owndata' indicate? > > I originally thought that owndata is False iff 'a' is a view. But > that is incorrect. > > Consider the following: > > In [119]: a = np.zeros((3,3)) > > In [120]: a.flags.owndata # should be True; zeros() creates and > returns a non-view array. > Out[120]: True > > In [121]: a_view1 = a[2:, :] > > In [122]: a_view1.flags.owndata # expected to be False > Out[122]: False > > In [123]: a_fancy1 = a[[0,1], :] > > In [124]: a_fancy1.flags.owndata # expected to be True, a_fancy1 is a > fancy-indexed array. > Out[124]: True > > In [125]: a_fancy2 = a[:, [0,1]] > > In [126]: a_fancy2.flags.owndata # expected to be True, a_fancy2 is a > fancy-indexed array. > Out[126]: False > > So when I query an array's flags.owndata, what is it telling me? What > I want to know is whether an array is a view or not. If flags.owndata > has nothing to do with the 'viewness' of an array, how would I > determine if an array is a view? > > In the previous example, a_fancy2 does not own its data, as indicated > by 'owndata' being False. But when I modify a_fancy2, 'a' is not > modified, as expected, but contrary to what 'owndata' would seem to > indicate. > > The numpybook's documentation of owndata could perhaps be a bit > clearer on the subject: > > """ > OWNDATA (O) the array owns the memory it uses or if it borrows it from > another object (if this is False, the base attribute retrieves a > reference to the object this array obtained its data from) > """ > > From my reading, owndata has nothing to do with the 'viewness' of an > > array. Is this correct? What is the intent of this flag, then? Its > wording could perhaps be improved: owndata is True iff (1) the array > owns the memory it uses or (2) the array borrows it from another > object. The second clause seems to indicate that the array **does > not** own its data since it is borrowing it from another object. > However, flags.owndata will be true in this case. > > If I cannot use flags.owndata, what is a reliable way to determine > whether or not an array is a view? > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > > > > > > > -- > > Brian A. Larsen > ISR-1 Space Science and Applications > Los Alamos National Laboratory > PO Box 1663, MS-D466 > Los Alamos, NM 87545 > USA > > (For overnight add: > SM-30, Bikini Atoll Road) > > Phone: 505-665-7691 > Fax: 505-665-7395 > email: balar...@lanl.gov > > Correspondence / > Technical data or Software Publicly Available > > > > > _______________________________________________ > NumPy-Discussion mailing list > NumPy-Discussion@scipy.org > http://mail.scipy.org/mailman/listinfo/numpy-discussion > _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion