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