[Numpy-discussion] detecting shared data
Bill Baxter
wbaxter@gmail....
Wed Apr 11 18:34:18 CDT 2007
On 4/12/07, Matthew Koichi Grimes <mkg@cs.nyu.edu> wrote:
> It's better than nothing. I basically want some sanity-check assert code
> that can assert that some arrays are in fact sub-arrays of another
> array. Your OWNDATA suggestion meets me halfway by allowing me to check
> that these sub-arrays are at least sub-arrays of *someone*.
>
> Thanks,
> -- Matt
>
> Pierre GM wrote:
> > On Wednesday 11 April 2007 18:12:16 Matthew Koichi Grimes wrote:
> >
> >> Is there any way to detect whether one array is a view into another
> >>
> >> array? I'd like something like:
> >> >>> arr = N.arange(5)
> >> >>> subarr = arr[1:3]
> >> >>> sharesdata(arr, subarr)
> >>
> >
> > Mmh, would arr.flags['OWNDATA'] would do the trick ?
> > p.
I wrote this a while back that may do what you want:
def same_array(a, b):
"""Tries to figure out if a and b are sharing (some of) the same
memory or not.
This is sometimes useful for determining if a copy was made as a
result of some
operation, or for determining if modifying a might also modify b.
A True result means that a and b both borrow memory from the same
array object,
but it does not necessarily mean the memory regions used overlap.
For example:
>>> x = rand(4,4)
>>> a,b = x[:2], x[2:]
>>> same_array(a,b)
True
A False result means the arrays definitely do not overlap in memory.
same_array(a, b) -> Bool
"""
ab = a
while ab.base is not None:
ab = ab.base
bb = b
while bb.base is not None:
bb = bb.base
return ab is bb
But maybe that's pretty much what may_share_memory does?
--bb
More information about the Numpy-discussion
mailing list