Spec-Zone.ru › NumPy 1.21

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 в окончательном результате (например, в 2-мерном массиве, если 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

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

dtypeкод типа данных, необязательно

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

outndarray, None или кортеж ndarray и None, необязательно

Место, в которое сохраняется результат. Если не предоставлен или 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])

Пример с 2-мерным массивом:

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

Spec-Zone.ru

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