[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