Spec-Zone.ru › NumPy 1.18

numpy.ufunc.reduceat

метод

ufunc.reduceat(a, indices, axis=0, dtype=None, out=None)

Выполняет (локальное) сокращение со специфицированными срезами по одной оси.

Для i в range(len(indices)), reduceat вычисляет ufunc.reduce(a[indices[i]:indices[i+1]]), что становится i-й обобщённой «строкой», параллельной axis в конечном результате (например, в двумерном массиве, если axis = 0, это становится i-й строкой, но если axis = 1, это становится i-м столбцом). Есть три исключения из этого:

  • когда i = len(indices) - 1 (так что для последнего индекса), indices[i+1] = a.shape[axis].
  • если indices[i] >= indices[i + 1], i-я обобщённая «строка» просто a[indices[i]].
  • если indices[i] >= len(a) или indices[i] < 0, возникает ошибка.

Форма выходных данных зависит от размера indices и может быть больше, чем a (это происходит, если len(indices) > a.shape[axis]).

Параметры
aarray_like

Массив, над которым нужно действовать.

indicesarray_like

Парные индексы, разделённые запятыми (а не двоеточием), указывающие на срезы для сокращения.

axisint, optional

Ось, вдоль которой применять сокращение.

dtypedata-type code, optional

Тип, используемый для представления промежуточных результатов. По умолчанию тип данных выходного массива, если он предоставлен, или тип данных входного массива, если выходной массив не предоставлен.

outndarray, None, or tuple of ndarray and None, optional

Местоположение, в которое сохраняется результат. Если не предоставлен или None, возвращается свежевыделенный массив. Для согласованности с ufunc.__call__, если задано в качестве ключевого аргумента, это может быть заключено в кортеж из одного элемента.

Изменено в версии 1.13.0: Кортежи разрешены для ключевого аргумента.

Возвращает
rndarray

Значения, полученные в результате сокращения. Если out был предоставлен, r — ссылка на out.

Примечания

Дескриптивный пример:

Если a является одномерным, функция ufunc.accumulate(a) такая же, как ufunc.reduceat(a, indices)[::2], где indices это range(len(array) - 1) с нулём, помещённым в каждый другой элемент: indices = zeros(2 * len(a) - 1), indices[1::2] = range(1, len(a)).

Не обманывайтесь именем этого атрибута: reduceat(a) не обязательно меньше, чем a.

Примеры

Чтобы получить текущую сумму четырёх последовательных значений:

>>> np.add.reduceat(np.arange(8),[0,4, 1,5, 2,6, 3,7])[::2]
array([ 6, 10, 14, 18])

Пример с двумерным массивом:

>>> x = np.linspace(0, 15, 16).reshape(4,4)
>>> x
array([[ 0.,   1.,   2.,   3.],
       [ 4.,   5.,   6.,   7.],
       [ 8.,   9.,  10.,  11.],
       [12.,  13.,  14.,  15.]])
# reduce such that the result has the following five rows:
# [row1 + row2 + row3]
# [row4]
# [row2]
# [row3]
# [row1 + row2 + row3 + row4]
>>> np.add.reduceat(x, [0, 3, 1, 2, 0])
array([[12.,  15.,  18.,  21.],
       [12.,  13.,  14.,  15.],
       [ 4.,   5.,   6.,   7.],
       [ 8.,   9.,  10.,  11.],
       [24.,  28.,  32.,  36.]])
# reduce such that result has the following two columns:
# [col1 * col2 * col3, col4]
>>> np.multiply.reduceat(x, [0, 3], 1)
array([[   0.,     3.],
       [ 120.,     7.],
       [ 720.,    11.],
       [2184.,    15.]])

© 2005–2020 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.18/reference/generated/numpy.ufunc.reduceat.html

Spec-Zone.ru

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