Spec-Zone.ru › NumPy 1.20

numpy.ufunc.reduceat

метод

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

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

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

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

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

Параметры
arrayarray_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.

Примечания

Описание с примером:

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

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

Примеры

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

>>> 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–2021 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/1.20/reference/generated/numpy.ufunc.reduceat.html

Spec-Zone.ru

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