numpy计算顺序如何影响结果?

numpy计算顺序如何影响结果?,numpy,Numpy,为什么下面两行代码计算相同的东西,但得到的结果不同 kernel1 = np.diag(np.exp(-scale*eigen_values)) kernel2 = np.exp(-scale*np.diag(eigen_values)) 输出 False 看看这些价值观!然后您将看到问题:当给定一个1-d数组时,将创建一个2-d数组,其中零位于非对角位置。在kernel1中,最后执行diag,因此非对角值为0。在kernel2中,在diag之后应用exp,并且exp(0)是1,因此在ke

为什么下面两行代码计算相同的东西,但得到的结果不同

kernel1 = np.diag(np.exp(-scale*eigen_values))
kernel2 = np.exp(-scale*np.diag(eigen_values))

输出

False

看看这些价值观!然后您将看到问题:当给定一个1-d数组时,将创建一个2-d数组,其中零位于非对角位置。在
kernel1
中,最后执行
diag
,因此非对角值为0。在
kernel2
中,在
diag
之后应用
exp
,并且
exp(0)
是1,因此在
kernel2
中,非对角项都是1。(请记住,这是按元素应用的;它不是矩阵指数。)


本征值是(n,)
False
In [19]: eigen_values = np.array([1, 0.5, 0.1])

In [20]: scale = 1.0

In [21]: np.diag(np.exp(-scale*eigen_values))
Out[21]: 
array([[0.36787944, 0.        , 0.        ],
       [0.        , 0.60653066, 0.        ],
       [0.        , 0.        , 0.90483742]])

In [22]: np.exp(-scale*np.diag(eigen_values))
Out[22]: 
array([[0.36787944, 1.        , 1.        ],
       [1.        , 0.60653066, 1.        ],
       [1.        , 1.        , 0.90483742]])