numpy.ufunc.reduce

方法

ufunc.reduce(array, axis=0, dtype=None, out=None, keepdims=False, initial=<no value>, 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) ,累计向每个 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()。

参数
arrayarray_like

要执行的数组。

axis无、int或int的元组,可选

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

1.7.0 新版功能.

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

对于非交换或非结合的运算,在多个轴上进行约简是不明确的。不明飞行物目前在这种情况下不提出例外,但很可能在未来提出。

dtype数据类型代码,可选

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

outndarray、none或ndarray和none的元组,可选

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

在 1.13.0 版更改: 关键字参数允许使用元组。

keepdims可选的布尔

如果设置为“真”,则缩小的轴将保留在结果中,作为尺寸为1的尺寸。使用此选项,结果将正确广播到原始 array .

1.7.0 新版功能.

initial标量,可选

开始减少的值。如果ufunc没有标识或dtype为object,则默认为none,否则默认为ufunc.identity。如果 None 如果给定,则使用约简的第一个元素,如果约简为空,则抛出错误。

1.15.0 新版功能.

where数组类似bool,可选

广播以匹配 array ,并选择要包含在缩减中的元素。注意,对于像 minimum 如果没有定义身份,就必须传入 initial .

1.17.0 新版功能.

返回
r恩达雷

缩小的阵列。如果 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