在numpy.eye上使用numpy.identity有什么好处?

时间:2015-02-06 10:19:24

标签: python arrays performance numpy

查看了numpy的{​​{3}}和eye的手册页后,我认为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

的优势是什么?

3 个答案:

答案 0 :(得分:37)

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

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

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

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

答案 1 :(得分: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)

答案 2 :(得分:0)

np。 identity-返回一个 SQUARE MATRIX (二维数组的特殊情况),它是一个身份矩阵,其中主对角线(即“ k = 0”)为1,其他值为0。您不能在此处更改对角线k

np。 eye-返回 2D-ARRAY (2D数组),它填充对角线,即可以设置的“ k”,其值为1,其余部分为0。

因此,主要优势取决于要求。如果需要身份矩阵,可以立即申请身份,也可以致电np。将其余的保留为默认值。

但是,如果您需要特定形状/大小的1和0矩阵或对角线有控制权,则可以使用眼睛方法

就像矩阵是数组的特例一样,np.identity矩阵也是np.eye的特例

参考: https://numpy.org/doc/stable/reference/generated/numpy.identity.html [2]: http://ttps://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.eye.html [3]: https://www.hackerrank.com/challenges/np-eye-and-identity/problem