我有一个无向网络,其中每个节点都可以是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]
是否有一些聪明的 numpy 可以让我避免这种 for 循环?如果最好的方法是使用邻接矩阵,那也是可以接受的。