web-dev-qa-db-ja.com

numpy.eyeより​​もnumpy.identityを使用する利点は何ですか?

numpyの-​​ eye および identity のマニュアルページを確認したところ、identityeyeの特殊なケースでした。オプションが少ないため(たとえば、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を使用する利点は何ですか?

31
Kieran Hunt

identityeyeを呼び出すだけなので、配列の構築方法に違いはありません。 identity のコードは次のとおりです。

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

あなたが言うように、主な違いはeyeで対角線をオフセットできるのに対し、identityは主な対角線のみを埋めることです。

恒等行列は数学でそのような一般的な構造であるため、identityを使用する主な利点はその名前だけにあるようです。

41
Alex Riley