Подтвердить что ты не робот

В чем преимущества использования numpy.identity над numpy.eye?

Просмотрев страницы руководства для 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?

4b9b3361

Ответ 1

identity просто вызывает eye, поэтому нет никакой разницы в том, как создаются массивы. Здесь код identity:

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

Как вы говорите, основное отличие состоит в том, что при eye диагональ может быть смещена, тогда как identity заполняет основную диагональ.

Так как единичная матрица является такой общей конструкцией в математике, кажется, что главным преимуществом использования identity является только его имя.