各ノードがkタイプのいずれかになる無向ネットワークがあります。ノードiごとに、ノードiが持つ各タイプの隣接ノードの数を計算する必要があります。
現在、列がノードのインデックスであるエッジリストでエッジを表しています。ノードはnxk行列として表され、各列はノード タイプを表します。ノードが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 はありますか? これを行う最善の方法が隣接行列を使用する場合、それも許容されます。