0

我想知道向量化以下公式的最佳方法是什么:

c= Sum(u(i)*<u(i),y>/v(i) )

<.,.>表示两个矩阵的点积。

假设我们有一个矩阵K= U*Diag(w)*U^-1w并且是大小u矩阵的特征值和特征向量)。是一个大小为 的向量。knxnyn

因此,如果 :

k=np.array([[1,2,3],[2,3,4],[2,7,8]])
y=np.array([1,4,5])
w,u=np.linalg.eigh(k)

然后 :

w=array([ -2.02599523,   0.47346124,  13.552534  ])


u=array([[-0.18897996,  0.95770742,  0.21698634],
        [ 0.82245177,  0.03363605,  0.5678395 ],
       [-0.53652554, -0.28577109,  0.79402471]])

这就是我实现它的方式:

uDoty=np.dot(u,y)
div=np.divide(y,w)

div=np.divide(uDoty,w)
r=np.tile(div,(len(u),1))
a=u*r.T
c=sum(a) 

但它实际上对我来说并不好看。所以有什么建议吗?

4

1 回答 1

2

您可以避免使用np.tile某些广播:

U = np.dot(u, y)
d = U/w
a = u*d[:,None]
c = a.sum()
于 2012-09-28T13:18:37.920 回答