Spec-Zone.ru › NumPy 1.21

numpy.shares_memory

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

Определить, делят ли два массива память.

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

Эта функция может быть экспоненциально медленной для некоторых входных данных, если max_work не задано конечным числом или MAY_SHARE_BOUNDS. В случае сомнений, используйте numpy.may_share_memory вместо этого.

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

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

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

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

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

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

max_work=MAY_SHARE_BOUNDS

Проверяются только границы памяти a и b.

Возвращает
outbool
Исключения
numpy.TooHardError

Превышено max_work.

См. также

may_share_memory

Примеры

>>> 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 минуты для этого случая. Возможно найти задачи, которые займут значительно больше времени.

© 2005–2022 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.21/reference/generated/numpy.shares_memory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API