On Thu, May 24, 2012 at 1:59 PM, Nathaniel Smith <[email protected]> wrote: > On Thu, May 24, 2012 at 6:07 PM, Larsen, Brian A <[email protected]> wrote: >> This is the stack overflow discussion mentioned. >> >> http://stackoverflow.com/questions/9164269/can-you-tell-if-an-array-is-a-view-of-another >> >> I basically implemented the answer from SO. I feel like the "is" gives you >> a good handle on things since to be true they are actually the same location >> in memory. > > If using the current development version of numpy, that answer is > actually wrong... if you do > a = np.arange(10) > b = a.view() > c = b.view() > then in the development version, c.base is a, not b. This is the > source of some contention and confusion right now...: > https://github.com/numpy/numpy/pull/280#issuecomment-5888154 > > In any case, if "b.base is a" is True, then you can be pretty certain > that b and a share memory, but if it is False, it doesn't tell you > much at all. AFAICT np.may_share_memory would be strictly more useful.
as example: I checked pandas recently and IIRC, I needed three .base to get a True >>> x = np.random.randn(4,5) >>> xdf = pa.DataFrame(data=x) >>> type(xdf[1]) <class 'pandas.core.series.Series'> >>> xdf[1].base is x False >>> xdf[1].base.base is x False >>> xdf[1].base.base.base is x True >>> np.may_share_memory(xdf[1], x) True >>> Josef > > -- Nathaniel > _______________________________________________ > 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
