web-dev-qa-db-fra.com

Quels sont les avantages d'utiliser numpy.identity par rapport à numpy.eye?

Après avoir parcouru les pages de manuel des numpyeye 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?

31
Kieran Hunt

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.

41
Alex Riley