マトリックスを並行して塗りつぶす方法について質問があります。私は行ごとにPythonでそれをやろうとしています。しかし、それを並行して行う時間は、逐次処理時間よりも最悪です。どのように効率的に行うことができますか?注:インデックスの値を知る必要があります(iおよびj)。マトリックスを平行に塗りつぶす
Squential
def something(pos, size):
global matrix
numpy.zeros(shape=(size, size))
for i in xrange(size):
matrix[i][i] = 0.0
i_lat = pos[i]['lat']
i_lon = pos[i]['lon']
for j in xrange(i + 1, size):
matrix[j][i] = matrix[i][j] = _matrix_update(pos, i_lat, i_lon, i, j)
def _matrix_update(pos, lat, lon, u, v):
return 0.0 if u == v else euclidean_distance((lat, lon), (pos[v]['lat'], pos[v]['lon']))
パラレル
def something(pos, size):
global matrix
numpy.zeros(shape=(size, size))
for i in xrange(size):
matrix[i][i] = 0.0
i_lat = pos[i]['lat']
i_lon = pos[i]['lon']
Parallel(n_jobs=mp.cpu_count())(delayed(_matrix_update)(pos, i_lat, i_lon, i, j) for j in xrange(i, size))
def _matrix_update(pos, lat, lon, u, v):
global matrix
matrix[u][v] = matrix[v][u] = (0.0 if u == v else euclidean_distance((lat, lon), (pos[v]['lat'], pos[v]['lon'])))
私はループなしでベクトル化された方法で行うことができると思います。あなたはあなたの質問をサンプル入力マトリックス(5行で十分であるはずです)で更新できますか?このデータと望む結果のマトリックスで何をしたいのですか? – MaxU
また、[それら](http://docs.scipy.org/doc/scipy-0.14.0/reference/spatial.distance.html)_vectorized_ functions – MaxU
をチェックすることもできます。この場合、Numpyは使用できませんなぜなら、euclidean_distance関数はこの場合の適切なメソッドであり、必要なときにフレームワークを実装するものではないからです。 – user3108967