numpy.shares_memory #
- 麻木的。share_memory ( a , b , / , max_work = None ) #
确定两个数组是否共享内存。
警告
对于某些输入,此函数可能会呈指数级缓慢,除非 max_work设置为有限数或
MAY_SHARE_BOUNDS
。如有疑问,请改用numpy.may_share_memory
。- 参数:
- a, b ndarray
输入数组
- max_work int,可选
解决重叠问题所花费的精力(要考虑的候选解决方案的最大数量)。以下特殊值得到认可:
- max_work=MAY_SHARE_EXACT(默认)
问题就准确解决了。在这种情况下,仅当数组之间存在共享元素时,该函数才返回 True。在某些情况下,找到精确的解决方案可能需要很长时间。
- 最大工作=MAY_SHARE_BOUNDS
仅检查 a 和 b 的内存边界。
- 返回:
- 输出布尔值
- 加薪:
- numpy.exceptions.TooHardError
超过 max_work。
也可以看看
例子
>>> 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 的情况下运行大约需要 1 分钟。有可能发现需要更长时间的问题。
np.shares_memory(x1, x2)