В чем преимущества использования 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
?
Ответы
Ответ 1
identity
просто вызывает eye
, поэтому нет никакой разницы в том, как создаются массивы. Здесь код identity
:
def identity(n, dtype=None):
from numpy import eye
return eye(n, dtype=dtype)
Как вы говорите, основное отличие состоит в том, что при eye
диагональ может быть смещена, тогда как identity
заполняет основную диагональ.
Так как единичная матрица является такой общей конструкцией в математике, кажется, что главным преимуществом использования identity
является только его имя.