0

次の式をベクトル化するための最良の方法は何でしょうか。

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

<.,.>2つの行列の内積を意味します。

行列があるとしましょう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 に答える