6

次のコードは、まさに私がやりたいことを実行しています (これはクリギング メソッドの一部です)。しかし、問題は遅すぎることです。for ループを numpy にプッシュするオプションがあるかどうか知りたいですか? numpy.sum を押し出して、そこで axis 引数を使用すると、少し高速になりますが、明らかにそれがボトルネックではありません。forloop を numpy にプッシュして高速化する方法、または他の方法で高速化する方法についてのアイデアはありますか?)

# n = 2116
print GRZVV.shape  # (16309, 2116)
print GinvVV.shape  # (2117, 2117) 
VVg = numpy.empty((GRZVV.shape[0]))

for k in xrange(GRZVV.shape[0]):
    GRVV = numpy.empty((n+1, 1))
    GRVV[n, 0] = 1
    GRVV[:n, 0] = GRZVV[k, :]
    EVV = numpy.array(GinvVV * GRVV)  # GinvVV is numpy.matrix
    VVg[k] = numpy.sum(EVV[:n, 0] * VV)

いくつかのものをクリアするために、ndarrays n マトリックスの次元を投稿しました

編集:VVの形状は2116です

4

2 に答える 2

5

k を超えるループ (ランタイム ~3s) の代わりに、次のことを行うことができます。

tmp = np.concatenate((GRZVV, np.ones((16309,1),dtype=np.double)), axis=1)
EVV1 = np.dot(GinvVV, tmp.T)
#Changed line below based on *askewchan's* recommendation
VVg1 = np.sum(np.multiply(EVV1[:n,:],VV[:,np.newaxis]), axis=0)
于 2013-09-23T13:25:24.510 に答える