numpy.shares_memory#

numpy.shares_memory(a, b, /, max_work=None)#

确定两个数组是否共享内存。

警告

除非max_work设置为0或正整数,否则此函数对于某些输入可能会呈指数级慢。如有疑问,请改用numpy.may_share_memory

参数:
a, bndarray

输入数组

max_workint,可选

用于解决重叠问题的计算量(要考虑的最大候选解决方案数)。识别以下特殊值

max_work=-1 (默认)

精确解决问题。在这种情况下,只有当数组之间存在共享元素时,函数才返回True。在某些情况下,查找精确解可能需要非常长的时间。

max_work=0

仅检查a和b的内存边界。这等效于使用may_share_memory()

返回:
outbool
引发:
numpy.exceptions.TooHardError

超过 max_work。

另请参见

may_share_memory

示例

>>> import numpy as np
>>> 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

检查两个数组是否共享内存是 NP 完全问题,运行时间可能会随着维数的增加呈指数级增长。因此,通常应将max_work设置为有限数值,因为有可能构造出运行时间非常长的示例

>>> 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.exceptions.TooHardError: Exceeded max_work

在此情况下,不设置max_work运行np.shares_memory(x1, x2)大约需要1分钟。有可能找到运行时间更长的例子。