这里最好的矢量化方法是什么?

时间:2012-09-28 12:01:41

标签: python numpy vectorization

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

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

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

假设我们有一个矩阵K= U*Diag(w)*U^-1wu是大小为k的矩阵nxn的特征值和特征向量。 y是一个大小为n的向量。

所以如果:

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) 

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

1 个答案:

答案 0 :(得分:2)

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

U = np.dot(u, y)
d = U/w
a = u*d[:,None]
c = a.sum()