私は、それぞれのノードがkのいずれかのタイプである無向ネットワークを持っています。各ノード私はのために、ノード私はがそれぞれのタイプを持っている隣人の数を計算する必要があります。numgpyでedgelistからの "neigborhood"の値を累積します
今はエッジがノードのインデックスであるエッジグリストでエッジを表現しています。ノードはn x kの行列で表されます。各列はノードタイプを表します。ノードのタイプがkの場合、kカラムの値は1、そうでない場合は0です。
ここに私の現在のコードがありますが、それは正しいが、遅すぎる。
# example nodes and edges, both typically much longer
nodes = np.array([[0, 0, 1],
[0, 1, 0],
[1, 0, 0]])
edges = np.array([[0, 1],
[1, 2]])
neighbors = np.zeros_like(nodes)
for i, j in edges:
neighbors[i] += nodes[j]
neighbors[j] += nodes[i]
私はこのforループを避けることができる賢明なnumpyがありますか?これを行う最善の方法が隣接行列である場合は、それも許容されます。
なぜ '隣人[I] =ノード[j]を'? – HYRY
申し訳ありませんが、 '='はタイプミスでした。 '+ =' – fgregg
これは 'numpy.bincount()'を使うことができます。 – HYRY