2015-02-06 21 views
18

说完看了看man页面numpyeyeidentity,我认为identity是的eye一个特例,因为它具有较小的选项(例如eye可以填写转移对角线,identity不能),但可以振振有词地运行更快速。然而,这不是小或大的数组的情况:在numpy.eye上使用numpy.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 

那么,什么是使用identity超过eye的优势在哪里?

回答

27

identity只是调用eye所以在数组的构造上没有区别。下面的代码为identity

def identity(n, dtype=None): 
    from numpy import eye 
    return eye(n, dtype=dtype) 

正如你所说的,主要的区别在于eye对角线罐可被抵消,而identity只填充主对角线。

由于单位矩阵在数学中是如此普遍的构造,所以使用identity的主要优点似乎仅仅是因为它的名字。

相关问题