NumPy中通用功能的身份价值是什么?它用于什么?

时间:2018-02-06 15:29:08

标签: python arrays numpy

根据NumPy的文件,numpy.ufunc.identity

  

包含ufunc的标识元素的数据属性(如果是)   有一个。如果没有,则属性值为None。

我不明白什么是身份元素。在阅读numpy.ufunc.reduce中的示例后,如下所示

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

看起来身份值 i 仅用于初始化过程,以便对于具有两个参数的通用函数 f(x,y) f (i,y)= y 。通用功能的身份价值是什么?它用于什么?

2 个答案:

答案 0 :(得分:4)

身份是来自math的术语。操作的标识值基本上是使操作无效的值。例如,附加标识为0,因为a + 0 = a0 + a = a表示所有a。所以如果你在翻译中这样做:

>>> numpy.add.identity
0

减法(2 - 0 = 0,但0 - 2 = -2)没有这样的数字,因此numpy.subtract.identityNone

答案 1 :(得分:2)

尝试该示例代码:

In [34]: A = np.array([1,2,3])
In [35]: op = np.add
In [36]: r = op.identity
In [37]: r
Out[37]: 0
In [38]: for i in range(3):
    ...:     r = op(r, A[i])
    ...:     
In [39]: r
Out[39]: 6

现在有乘法;首先使用与add相同的起点:

In [40]: op = np.multiply
In [41]: r = 0
In [42]: for i in range(3):
    ...:     r = op(r, A[i])
    ...:     
In [43]: r
Out[43]: 0

现在有了多重身份:

In [44]: r = op.identity
In [45]: r
Out[45]: 1
In [46]: for i in range(3):
    ...:     r = op(r, A[i])
    ...:     
In [47]: r
Out[47]: 6

换句话说,identityop.reduce提供了一个合适的起点。