numpy.ufunc.reduce#
метод
- универсальная функция.reduce(массив, axis=0, dtype=None, out=None, keepdims=False, initial=<нет значение>, where=True)#
Сокращает
arrayизмерение на единицу, применяя ufunc вдоль одной оси.Пусть \(array.shape = (N_0, ..., N_i, ..., N_{M-1})\). Затем \(ufunc.reduce(array, axis=i)[k_0, ..,k_{i-1}, k_{i+1}, .., k_{M-1}]\) = результат итерации j над \(range(N_i)\), кумулятивно применяя ufunc к каждому \(array[k_0, ..,k_{i-1}, j, k_{i+1}, .., k_{M-1}]\). Для одномерного массива reduce даёт результаты, эквивалентные:
r = op.identity # op = ufunc for i in range(len(A)): r = op(r, A[i]) return r
Например, add.reduce() эквивалентно sum().
- Параметры:
- массивarray_like
Массив, над которым выполняется действие.
- осьNone или int или кортеж ints, опционально
Ось или оси, вдоль которых выполняется редукция. По умолчанию (ось = 0) — выполнить редукцию по первому измерению входного массива. ось может быть отрицательным, в этом случае отсчет ведется от последней к первой оси.
Если это None, выполняется редукция по всем осям. Если это кортеж целых чисел, редукция выполняется по нескольким осям, вместо одной оси или всех осей, как раньше.
Для операций, которые либо не коммутативны, либо не ассоциативны, выполнение редукции по нескольким осям не определено однозначно. Ufuncs в настоящее время не вызывают исключение в этом случае, но, вероятно, будут делать это в будущем.
- dtypeкод типа данных, опционально
Тип данных, используемый для выполнения операции. По умолчанию соответствует типу
outесли задано, и тип данныхarrayв противном случае (хотя может быть повышено для сохранения точности в некоторых случаях, таких какnumpy.add.reduceдля целочисленного или булевого ввода).- выходndarray, None, …, или кортеж из ndarray и None, необязательно
Место, в которое сохраняется результат. Если не предоставлено или None, возвращается вновь выделенный массив. Если передано как ключевой аргумент, может быть Ellipses (
out=...) для гарантии, что массив возвращается, даже если результат 0-мерный (что особенно полезно для dtype object), или кортеж из 1 элемента (последнее для согласованности сufunc.__call__).Новое в версии 2.3: Поддержка
out=...был добавлен.- keepdimsbool, необязательно
Если установлено значение True, оси, которые были сокращены, остаются в результате как измерения с размером один. С этой опцией результат будет корректно транслироваться против исходного
array.- начальныйскаляр, опционально
Значение, с которого начинается редукция. Если ufunc не имеет идентичности или тип данных - object, по умолчанию устанавливается None - в противном случае по умолчанию используется ufunc.identity. Если
Noneесли задан, используется первый элемент редукции, и возникает ошибка, если редукция пуста.- гдеarray_like из bool, необязательный
Логический массив, который транслируется для соответствия размерностям
array, и выбирает элементы для включения в редукцию. Обратите внимание, что для ufunc, таких какminimumкоторые не имеют определенного тождества, необходимо также передатьinitial.
- Возвращает:
- rndarray
Уменьшенный массив. Если выход был предоставлен, r является ссылкой на него.
Примеры
>>> import numpy as np >>> np.multiply.reduce([2,3,5]) 30
Пример многомерного массива:
>>> X = np.arange(8).reshape((2,2,2)) >>> X array([[[0, 1], [2, 3]], [[4, 5], [6, 7]]]) >>> np.add.reduce(X, 0) array([[ 4, 6], [ 8, 10]]) >>> np.add.reduce(X) # confirm: default axis value is 0 array([[ 4, 6], [ 8, 10]]) >>> np.add.reduce(X, 1) array([[ 2, 4], [10, 12]]) >>> np.add.reduce(X, 2) array([[ 1, 5], [ 9, 13]])
Вы можете использовать
initialаргумент ключевого слова для инициализации редукции с другим значением, иwhereдля выбора конкретных элементов для включения:>>> np.add.reduce([10], initial=5) 15 >>> np.add.reduce(np.ones((2, 2, 2)), axis=(0, 2), initial=10) array([14., 14.]) >>> a = np.array([10., np.nan, 10]) >>> np.add.reduce(a, where=~np.isnan(a)) 20.0
Позволяет сокращения пустых массивов, где они обычно завершаются неудачей, т.е. для ufuncs без идентичности.
>>> np.minimum.reduce([], initial=np.inf) inf >>> np.minimum.reduce([[1., 2.], [3., 4.]], initial=10., where=[True, False]) array([ 1., 10.]) >>> np.minimum.reduce([]) Traceback (most recent call last): ... ValueError: zero-size array to reduction operation minimum which has no identity