[Numpy-discussion] Determine if two arrays share references

Keith Goodman kwgoodman at gmail.com
Wed Feb 10 23:16:17 EST 2010


On Wed, Feb 10, 2010 at 8:01 PM, Robert Kern <robert.kern at gmail.com> wrote:
> On Wed, Feb 10, 2010 at 21:41, Keith Goodman <kwgoodman at gmail.com> wrote:
>> Here are two arrays that share references:
>>
>>>> x = np.array([1,2,3])
>>>> y = x[1:]
>>
>> and here are two that don't:
>>
>>>> x = np.array([1,2,3])
>>>> y = x[1:].copy()
>>
>> If I didn't know how the arrays were constructed, how would I
>> determine if any elements in the two arrays share reference?
>
> It is hard to do this 100% accurately given the full variety of
> strided memory, but:
>
> In [2]: np.may_share_memory?
> Type:           function
> Base Class:     <type 'function'>
> String Form:    <function may_share_memory at 0x1565bb0>
> Namespace:      Interactive
> File:
> /Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/numpy-1.3.0-py2.5-macosx-10.3-i386.egg/numpy/lib/utils.py
> Definition:     np.may_share_memory(a, b)
> Docstring:
>    Determine if two arrays can share memory
>
>    The memory-bounds of a and b are computed.  If they overlap then
>    this function returns True.  Otherwise, it returns False.
>
>    A return of True does not necessarily mean that the two arrays
>    share any element.  It just means that they *might*.
>
>
> One example where this function returns True when a 100% accurate
> function would return False is x[::2] and x[1::2].

No looping or anything. That is great. Thank you.

>> x = np.array([1,2,3])
>> y = x[1:]
>> np.may_share_memory(x, y)
   True
>> np.may_share_memory(x, y.copy())
   False



More information about the NumPy-Discussion mailing list