2015-02-06 14 views
18

aver preso visione delle pagine man per numpy s' eye e identity, avevo supposto che identity era un caso speciale di eye, dal momento che ha meno opzioni (ad esempio eye diagonali possono riempire spostato, identity non può), ma potrebbe plausibilmente correre più velocemente. Tuttavia, questo non è il caso su entrambi gli array di piccole o grandi:Quali sono i vantaggi dell'uso di numpy.identity su numpy.eye?

>>> 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 

Qual è, allora, è il vantaggio di utilizzare identity sopra eye?

risposta

27

identity chiama semplicemente eye quindi non c'è differenza nel modo in cui gli array sono costruiti. Ecco il codice per identity:

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

Come dici tu, la differenza principale è che con eye la lattina diagonale può essere compensato, mentre identity riempie solo la diagonale principale.

Poiché la matrice identità è un costrutto così comune in matematica, sembra il principale vantaggio di utilizzare identity è per il suo nome da solo.

Problemi correlati