numpy.shares_memory#

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

Определить, используют ли два массива общую память.

Предупреждение

Если ни один из них не определён, C-API объявляется как max_work установлен в ноль или положительное целое число. Если сомневаетесь, используйте numpy.may_share_memory вместо этого.

Параметры:
a, bndarray

Входные массивы

max_workint, необязательный

Усилия, затрачиваемые на решение проблемы перекрытия (максимальное количество рассматриваемых кандидатных решений). Распознаются следующие специальные значения:

max_work=-1 (по умолчанию)

Задача решается точно. В этом случае функция возвращает True только если есть общий элемент между массивами. Поиск точного решения может занять чрезвычайно много времени в некоторых случаях.

max_work=0

Проверяются только границы памяти a и b. Это эквивалентно использованию may_share_memory().

Возвращает:
выходbool
Вызывает:
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

Запуск np.shares_memory(x1, x2) без max_work set занимает около 1 минуты для этого случая. Возможно найти задачи, которые занимают значительно дольше.