2015-02-06 15 views
18

Spojrzeliśmy na stronach manuala dla numpy „s eye i identity, ja założyć, że identity był szczególny przypadek eye, ponieważ ma mniej opcji (np eye może wypełnić przesunięte przekątnych identity nie mogą), ale może wiarygodnie uruchomić szybciej. Jednak nie jest to sprawa na małą lub dużą tablic:Jakie są zalety korzystania z numpy.identity przez 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 

Co zatem jest zaletą korzystania identity nad eye?

Odpowiedz

27

identity po prostu wywołuje eye, więc nie ma różnicy w sposobie konstruowania tablic. Oto kod dla identity:

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

jak mówisz, główną różnicą jest to, że z eye przekątnej Puszka może być przesunięty, natomiast identity tylko wypełnia głównej przekątnej.

Ponieważ matryca tożsamości jest tak powszechną konstrukcją w matematyce, wydaje się, że główną zaletą korzystania z niej jest sama nazwa.

Powiązane problemy