Après avoir parcouru les pages de manuel des numpy
eye
et identity
, j'avais supposé que identity
était un cas particulier de eye
, car il a moins d'options (par exemple eye
peut remplir les diagonales décalées, identity
ne peut pas), mais pourrait vraisemblablement s'exécuter plus rapidement. Cependant, ce n'est pas le cas sur les petits ou les grands tableaux:
>>> 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
Quel est donc l'avantage d'utiliser identity
sur eye
?
identity
appelle juste eye
donc il n'y a aucune différence dans la façon dont les tableaux sont construits. Voici le code pour identity
:
def identity(n, dtype=None):
from numpy import eye
return eye(n, dtype=dtype)
Comme vous le dites, la principale différence est qu'avec eye
la diagonale peut être décalée, tandis que identity
ne remplit que la diagonale principale.
Étant donné que la matrice d'identité est une construction courante en mathématiques, il semble que le principal avantage de l'utilisation de identity
soit uniquement pour son nom.