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]).Параметры: a : array_like
Массив, над которым выполняется операция.
indices : array_like
Сдвоенные индексы, разделенные запятыми (не двоеточием), определяющие срезы для сокращения.
axis : int, необязательно
Ось, по которой выполняется сокращение.
dtype : код типа данных, необязательно
Тип, используемый для представления промежуточных результатов. По умолчанию совпадает с типом выходного массива, если он предоставлен, или с типом входного массива, если выходной массив не указан.
out : ndarray, необязательно
Местоположение, в которое сохраняется результат. Если не указано, возвращается новый массив.
Возвращает: r : ndarray
Значения, полученные в результате сокращения. Если
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.]]) - когда
© 2008–2016 NumPy Developers
Licensed under the NumPy License.
https://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.ufunc.reduceat.html