numpy.shares_memory
-
Determine if two arrays share memory.
Warning
This function can be exponentially slow for some inputs, unless
max_work
is set to a finite number orMAY_SHARE_BOUNDS
. If in doubt, usenumpy.may_share_memory
instead.- Parameters
-
-
a, bndarray
-
Input arrays
-
max_workint, optional
-
Effort to spend on solving the overlap problem (maximum number of candidate solutions to consider). The following special values are recognized:
- max_work=MAY_SHARE_EXACT (default)
-
The problem is solved exactly. In this case, the function returns True only if there is an element shared between the arrays. Finding the exact solution may take extremely long in some cases.
- max_work=MAY_SHARE_BOUNDS
-
Only the memory bounds of a and b are checked.
-
- Returns
-
-
outbool
-
- Raises
-
- numpy.TooHardError
-
Exceeded max_work.
See also
Examples
>>> x = np.array([1, 2, 3, 4]) >>> np.shares_memory(x, np.array([5, 6, 7])) False >>> np.shares_memory(x[::2], x) True >>> np.shares_memory(x[::2], x[1::2]) False
Checking whether two arrays share memory is NP-complete, and runtime may increase exponentially in the number of dimensions. Hence,
max_work
should generally be set to a finite number, as it is possible to construct examples that take extremely long to run:>>> from numpy.lib.stride_tricks import as_strided >>> x = np.zeros([192163377], dtype=np.int8) >>> x1 = as_strided(x, strides=(36674, 61119, 85569), shape=(1049, 1049, 1049)) >>> x2 = as_strided(x[64023025:], strides=(12223, 12224, 1), shape=(1049, 1049, 1)) >>> np.shares_memory(x1, x2, max_work=1000) Traceback (most recent call last): ... numpy.TooHardError: Exceeded max_work
Running
np.shares_memory(x1, x2)
withoutmax_work
set takes around 1 minute for this case. It is possible to find problems that take still significantly longer.
© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.19/reference/generated/numpy.shares_memory.html