Having looked over the man pages for numpy
’s eye
and identity
, I’d assumed that identity
was a special case of 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
的优势是什么?
原文由 Kieran Hunt 发布,翻译遵循 CC BY-SA 4.0 许可协议
identity
只是调用eye
所以数组的构造方式没有区别。这是identity
的代码:正如您所说,主要区别在于
eye
对角线可以偏移,而identity
仅填充主对角线。由于单位矩阵是数学中如此常见的结构,使用
identity
的主要优势似乎仅在于其名称。