numpy
の- eye
および identity
のマニュアルページを確認したところ、identity
はeye
の特殊なケースでした。オプションが少ないため(たとえば、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
を使用する利点は何ですか?
identity
はeye
を呼び出すだけなので、配列の構築方法に違いはありません。 identity
のコードは次のとおりです。
def identity(n, dtype=None):
from numpy import eye
return eye(n, dtype=dtype)
あなたが言うように、主な違いはeye
で対角線をオフセットできるのに対し、identity
は主な対角線のみを埋めることです。
恒等行列は数学でそのような一般的な構造であるため、identity
を使用する主な利点はその名前だけにあるようです。