使用 numpy.identity 比 numpy.eye 有什么优势?

新手上路,请多包涵

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 许可协议

阅读 792
2 个回答

identity 只是调用 eye 所以数组的构造方式没有区别。这是 identity 的代码:

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

正如您所说,主要区别在于 eye 对角线可以偏移,而 identity 仅填充主对角线。

由于单位矩阵是数学中如此常见的结构,使用 identity 的主要优势似乎仅在于其名称。

原文由 Alex Riley 发布,翻译遵循 CC BY-SA 3.0 许可协议

要查看示例中的差异,请运行以下代码:

 import numpy as np

#Creates an array of 4 x 4 with the main diagonal of 1

arr1 = np.eye(4)
print(arr1)

print("\n")

#or you can change the diagonal position

arr2 = np.eye(4, k=1)  # or try with another number like k= -2
print(arr2)

print("\n")

#but you can't change the diagonal in identity

arr3 = np.identity(4)
print(arr3)

原文由 Fatih Gok 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题