numpy.shares_memory

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

确定两个阵列是否共享内存。

警告

对于某些输入,此函数的速度可能是指数级的,除非 max_work 设置为有限数或 MAY_SHARE_BOUNDS . 如有疑问,请使用 numpy.may_share_memory 相反。

参数
a, b恩达雷

输入数组

max_work可选的

努力解决重叠问题(要考虑的候选解决方案的最大数目)。可识别以下特殊值:

max_work=可以共享精确值(默认值)

问题完全解决了。在这种情况下,只有当数组之间共享了一个元素时,函数才会返回True。在某些情况下,找到精确解可能需要很长时间。

max_work=MAY_SHARE_BOUNDS

只检查A和B的内存边界。

返回
out布尔
加薪
numpy.TooHardError

超过最大工作。

实例

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

运行 np.shares_memory(x1, x2) 没有 max_work 在这种情况下,设置大约需要1分钟。有可能发现需要更长时间的问题。