numpy.shares_memory#
- numpy.shares_memory(a, b, /, max_work=None)#
判断两个数组是否共享内存。
警告
对于某些输入,此函数的速度可能会呈指数级下降,除非将 max_work 设置为零或正整数。如果不确定,请改用
numpy.may_share_memory
。- 参数:
- a, bndarray
输入数组
- max_workint, optional
解决重叠问题所花费的精力(要考虑的候选解决方案的最大数量)。识别以下特殊值
- max_work=-1 (默认)
问题将精确求解。在这种情况下,函数仅当数组之间存在共享元素时才返回 True。在某些情况下,寻找精确解可能需要非常长的时间。
- max_work=0
仅检查 `a` 和 `b` 的内存边界。这等同于使用
may_share_memory()
。
- 返回:
- outbool
- 抛出:
- numpy.exceptions.TooHardError
超过 `max_work` 限制。
另请参见
示例
>>> 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 分钟。仍然可能找到耗时更长的问题。