在numpy.eye上使用numpy.identity有什么好处?

Kie*_*unt 32 python arrays performance numpy

说完看了看man页面numpyeyeidentity,我认为identity是一个特例eye,因为它具有较小的选项(例如eye可以填写转移对角线,identity不能),但可以振振有词地更快速地运行.但是,对于小型或大型阵列,情况并非如此:

>>> np.identity(3)                                                  
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> np.eye(3)                                                       
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])
>>> timeit.timeit("import numpy; numpy.identity(3)", number = 10000)
0.05699801445007324
>>> timeit.timeit("import numpy; numpy.eye(3)", number = 10000)     
0.03787708282470703
>>> timeit.timeit("import numpy", number = 10000)                   
0.00960087776184082
>>> timeit.timeit("import numpy; numpy.identity(1000)", number = 10000)
11.379066944122314
>>> timeit.timeit("import numpy; numpy.eye(1000)", number = 10000)     
11.247124910354614
Run Code Online (Sandbox Code Playgroud)

那么,什么是使用的优势identity超过eye

Ale*_*ley 44

identity只是调用eye所以数组的构造方式没有区别.这是以下代码identity:

def identity(n, dtype=None):
    from numpy import eye
    return eye(n, dtype=dtype)
Run Code Online (Sandbox Code Playgroud)

正如你所说,主要的区别在于,eye对角线可以偏移,而identity只填充主对角线.

由于单位矩阵在数学中是如此常见的结构,因此使用的主要优点似乎identity仅仅是它的名称.

  • @aeduG:好问题 - 我真的不知道.如果我不得不猜测,那只是因为单位矩阵通常用数学符号表示为"I",但是这个字母不能用于编程语言,因为它可能会混淆为虚构单位.我想,"我"和"眼睛"是同音词,"眼睛"比"身份"更容易打字. (6认同)
  • 您知道为什么在许多张量库中将身份称为“眼睛”吗? (2认同)