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.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
Выполнение
np.shares_memory(x1, x2)без установкиmax_workзанимает около 1 минуты для этого случая. Возможно найти проблемы, которые займут значительно больше времени.
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.shares_memory.html