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
-
Тип данных, используемый для выполнения операции. По умолчанию соответствует типу данных
out(если задан), и типу данныхarrayв противном случае (хотя масштабируется для сохранения точности в некоторых случаях, таких какnumpy.add.reduceдля целочисленных или булевых входных данных). - 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–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/generated/numpy.ufunc.reduceat.html