numpy.ufunc.reduce #

方法

ufunc。reduce ( array , axis=0 , dtype=None , out=None , keepdims=False , initial=<无 值> , where=True ) #

array通过沿一个轴应用 ufunc 将 的维度减小一。

\(array.shape = (N_0, ..., N_i, ..., N_{M-1})\)。然后 \(ufunc.reduce(array, axis=i)[k_0, ..,k_{i-1}, k_{i+1}, .., k_{M-1}]\)=迭代j的结果\(range(N_i)\),累积地将 ufunc 应用于每个\(array[k_0, ..,k_{i-1}, j, k_{i+1}, .., k_{M-1}]\)。对于一维数组,reduce 产生的结果相当于:

r = op.identity # op = ufunc
for i in range(len(A)):
  r = op(r, A[i])
return r

例如,add.reduce() 相当于 sum()。

参数
数组类似数组

要执行操作的数组。

axis无或整数或整数元组,可选

执行缩减的一个或多个轴。默认值 ( axis = 0) 对输入数组的第一维执行缩减。axis可能为负数,在这种情况下,它从最后一个轴开始计数到第一个轴。

1.7.0 版本中的新增内容。

如果为“无”,则对所有轴执行缩减。如果这是一个整数元组,则在多个轴上执行归约,而不是像以前那样在单个轴或所有轴上执行归约。

对于不可交换或不可关联的运算,在多个轴上进行归约并没有明确定义。在这种情况下,ufunc 目前不会引发异常,但将来可能会引发异常。

dtype数据类型代码,可选

用于表示中间结果的类型。如果提供了输出数组,则默认为输出数组的数据类型;如果未提供输出数组,则默认为输入数组的数据类型。

out ndarray、None 或 ndarray 和 None 的元组,可选

存储结果的位置。如果未提供或无,则返回新分配的数组。为了与 保持一致 ufunc.__call__,如果作为关键字给出,则可以将其包装在 1 元素元组中。

版本 1.13.0 中进行了更改:关键字参数允许使用元组。

keepdims布尔值,可选

如果将此设置为 True,则缩小的轴将作为大小为 1 的维度保留在结果中。使用此选项,结果将根据原始 正确广播array

1.7.0 版本中的新增内容。

初始标量,可选

开始减少的值。如果 ufunc 没有标识或者 dtype 是对象,则默认为 None - 否则默认为 ufunc.identity。如果None给出,则使用归约的第一个元素,如果归约为空,则抛出错误。

1.15.0 版本中的新增功能。

其中array_like of bool,可选

一个布尔数组,它被广播以匹配 的维度array,并选择要包含在归约中的元素。请注意,对于像minimum这样没有定义标识的 ufunc,必须传入 also initial

1.17.0 版本中的新增功能。

返回
r ndarray

减少的数组。如果提供了out ,则 r是对其的引用。

例子

>>> np.multiply.reduce([2,3,5])
30

多维数组示例:

>>> X = np.arange(8).reshape((2,2,2))
>>> X
array([[[0, 1],
        [2, 3]],
       [[4, 5],
        [6, 7]]])
>>> np.add.reduce(X, 0)
array([[ 4,  6],
       [ 8, 10]])
>>> np.add.reduce(X) # confirm: default axis value is 0
array([[ 4,  6],
       [ 8, 10]])
>>> np.add.reduce(X, 1)
array([[ 2,  4],
       [10, 12]])
>>> np.add.reduce(X, 2)
array([[ 1,  5],
       [ 9, 13]])

您可以使用initial关键字参数用不同的值初始化归约,并where选择要包含的特定元素:

>>> np.add.reduce([10], initial=5)
15
>>> np.add.reduce(np.ones((2, 2, 2)), axis=(0, 2), initial=10)
array([14., 14.])
>>> a = np.array([10., np.nan, 10])
>>> np.add.reduce(a, where=~np.isnan(a))
20.0

允许减少通常会失败的空数组,即没有标识的 ufunc。

>>> np.minimum.reduce([], initial=np.inf)
inf
>>> np.minimum.reduce([[1., 2.], [3., 4.]], initial=10., where=[True, False])
array([ 1., 10.])
>>> np.minimum.reduce([])
Traceback (most recent call last):
    ...
ValueError: zero-size array to reduction operation minimum which has no identity