Kie*_*unt 32 python arrays performance numpy
说完看了看man页面numpy的eye和identity,我认为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
那么,什么是使用的优势identity超过eye?
Ale*_*ley 44
identity只是调用eye所以数组的构造方式没有区别.这是以下代码identity:
def identity(n, dtype=None):
    from numpy import eye
    return eye(n, dtype=dtype)
正如你所说,主要的区别在于,eye对角线可以偏移,而identity只填充主对角线.
由于单位矩阵在数学中是如此常见的结构,因此使用的主要优点似乎identity仅仅是它的名称.