РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
469 of 541 menu

Метод reduceat

Метод reduceat класса ufunc выполняет операцию редукции (свёртки) для последовательности срезов массива. В отличие от метода reduce, который применяет операцию ко всему массиву целиком, reduceat позволяет указать несколько точек начала и конца, чтобы выполнить редукцию для каждого указанного промежутка независимо. Первым параметром передаётся массив для обработки, вторым - список индексов, определяющих границы срезов.

Синтаксис

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

Параметры:

  • array - входной массив, к которому применяется редукция
  • indices - массив индексов, задающих начальные и конечные точки срезов. Если indices[i] меньше indices[i+1], то редукция применяется к срезу от indices[i] до indices[i+1]. Если indices[i] > indices[i+1], то редукция применяется от indices[i] до конца массива, а результат помещается на позицию i+1.
  • axis - ось, вдоль которой выполняется редукция (по умолчанию 0)
  • dtype - тип данных для промежуточных вычислений и результата
  • out - массив для записи результата

Пример

Применим метод reduceat к одномерному массиву с помощью операции сложения:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8]) res = np.add.reduceat(arr, [0, 3, 5]) print(res)

В этом примере индексы [0, 3, 5] определяют срезы: от 0 до 3 (сумма элементов 1+2+3=6), от 3 до 5 (сумма элементов 4+5=9), от 5 до конца (сумма элементов 6+7+8=21):

[ 6 9 21]

Пример

Рассмотрим пример с убывающими индексами. Когда indices[i] > indices[i+1], редукция применяется от indices[i] до конца массива:

import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7, 8]) res = np.add.reduceat(arr, [0, 5, 3]) print(res)

Результат: редукция от 0 до 5 (1+2+3+4+5=15), от 5 до конца (6+7+8=21), затем от 3 до конца (4+5+6+7+8=30):

[15 21 30]

Пример

Применим метод reduceat для двумерного массива по строке (ось 0) и по столбцам (ось 1):

import numpy as np arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) res_rows = np.add.reduceat(arr, [0, 2], axis=0) res_cols = np.add.reduceat(arr, [0, 2], axis=1) print("По строкам:") print(res_rows) print("По столбцам:") print(res_cols)

Результат выполнения кода:

"По строкам:" [[ 1 2 3] [11 13 15]] "По столбцам:" [[ 3 3] [ 9 6] [15 9]]

При редукции по строкам (axis=0) первый срез - строка 0, второй срез - строки 1 и 2 (4+7=11, 5+8=13, 6+9=15). При редукции по столбцам (axis=1) первый срез - столбец 0, второй срез - столбцы 1 и 2.

Пример

Используем метод reduceat с операцией умножения для нахождения произведений в срезах:

import numpy as np arr = np.array([1, 2, 3, 4, 5]) res = np.multiply.reduceat(arr, [0, 3]) print(res)

Результат: произведение элементов от 0 до 3 (1*2*3=6) и от 3 до конца (4*5=20):

[ 6 20]

Пример

Метод reduceat можно использовать с пользовательскими функциями, созданными с помощью frompyfunc. Например, найдём максимумы в срезах:

import numpy as np arr = np.array([3, 1, 4, 1, 5, 9, 2, 6]) res = np.maximum.reduceat(arr, [0, 3, 5]) print(res)

Результат выполнения кода:

[4 5 9]

Смотрите также

  • метод reduce,
    который выполняет редукцию по всему массиву
  • метод accumulate,
    который накапливает результат редукции на каждом шаге
  • метод outer,
    который применяет операцию ко всем парам элементов
  • метод at,
    который выполняет операцию над элементами по указанным индексам
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить