1

私はPythonが初めてなので、計算の効率に問題があります。このコードを使用して、H 行列と h ベクトルを埋めています (x_tr、x_te、および c はリストです)。

for l in xrange(0, b):
    for ls in xrange(0, b):
        H[l][ls] = 1.0/n_tr * numpy.sum([numpy.exp(-((numpy.linalg.norm(x_tr[i]-c[l])**2 + numpy.linalg.norm(x_tr[i]-c[ls])**2)/(2*s**2))) for i in range(0, n_tr)])
    h[l] = 1.0/n_te * numpy.sum([numpy.exp(-((numpy.linalg.norm(x_te[j]-c[l])**2)/(2*s**2))) for j in range(0, n_te)])

2 つのループを使用するのは効率が悪いと思います... 計算を高速化する簡単な方法はありますか? ベクトル化を使用する可能性があると言われましたが、どういうわけかこれがどのように機能するのかわかりません

ご協力いただきありがとうございます :)

4

1 に答える 1

1

ベクトル化の例:

>>> x_te = np.arange(10)
>>> c = np.range(5)
>>> (x_te[:,None] - c).sum(axis=0)
array([45, 35, 25, 15,  5])

次と同等です。

np.array([np.sum(xte[i]-c[j] for i in range(xte.size)) for j in range(c.size)])

それは言った:

asx_te[j]c[l]はループ内の 2 つのスカラーnp.linalg.norm(x[j]-c[i])**2です(x[j]-c[i])。したがって、次のhように計算できます

h = 1.0/n_te * numpy.sum([numpy.exp(-(x_te[: None]-c))/(2*s**2))) 

どちらから始めるべきですかH...

EDITおそらくブロードキャストに関するいくつかのドキュメントを確認する必要があります。

于 2012-09-26T09:35:04.377 に答える