如何仅从特定节点的邻接矩阵创建网络图?
How do I create network graph from an adjacency matrix for specific nodes only?
我有一个邻接矩阵 5000X5000,我想创建一个网络图。要求是用户将输入节点,输出将是该特定输入节点的图形(一阶和二阶)。
我已经尝试过使用 Gephi,但由于邻接矩阵很大,我无法专注于每个节点。所以我想如果我可以为特定节点创建一个图(因为我只对每个节点的 1 度和 2 度连接感兴趣,而不是超出那个)
Gephi 基于 UI,所以我没有代码。
输入将是一个 node_id,输出将是一个对应于 node_id 的图形(一阶和二阶连接)
这是一个使用 networkx
的实现:
import networkx as nx
import numpy as np
# make dummy adjacency matrix
a = np.random.rand(100,100)
a = np.tril(a)
a = a>0.95
# make graph from adjaceny matrix
G = nx.from_numpy_matrix(a)
def neigh(G, node, depth):
""" given starting node, recursively find neighbours
until desired depth is reached
"""
node_list = []
if depth==0:
node_list.append(node)
else:
for neighbor in G.neighbors(node):
node_list.append(node)
node_list += neigh(G, neighbor, depth-1)
return list(set(node_list)) # intermediate conversion to set to lose duplicates.
# a bit more compressed:
def neigh_short(G, node, depth):
""" given starting node, recursively find neighbours
until desired depth is reached
"""
node_list = [node]
if depth>0:
for neighbor in G.neighbors(node)
node_list += neigh_short(G, neighbor, depth-1)
return list(set(node_list)) # intermediate conversion to set to lose duplicates.
# example:
# find all neighbours with distance 2 from node 5:
n = neigh(G, node=5, depth=2)
# extract the respective subgraph from G and store in H
H = G.subgraph(n)
我有一个邻接矩阵 5000X5000,我想创建一个网络图。要求是用户将输入节点,输出将是该特定输入节点的图形(一阶和二阶)。
我已经尝试过使用 Gephi,但由于邻接矩阵很大,我无法专注于每个节点。所以我想如果我可以为特定节点创建一个图(因为我只对每个节点的 1 度和 2 度连接感兴趣,而不是超出那个)
Gephi 基于 UI,所以我没有代码。
输入将是一个 node_id,输出将是一个对应于 node_id 的图形(一阶和二阶连接)
这是一个使用 networkx
的实现:
import networkx as nx
import numpy as np
# make dummy adjacency matrix
a = np.random.rand(100,100)
a = np.tril(a)
a = a>0.95
# make graph from adjaceny matrix
G = nx.from_numpy_matrix(a)
def neigh(G, node, depth):
""" given starting node, recursively find neighbours
until desired depth is reached
"""
node_list = []
if depth==0:
node_list.append(node)
else:
for neighbor in G.neighbors(node):
node_list.append(node)
node_list += neigh(G, neighbor, depth-1)
return list(set(node_list)) # intermediate conversion to set to lose duplicates.
# a bit more compressed:
def neigh_short(G, node, depth):
""" given starting node, recursively find neighbours
until desired depth is reached
"""
node_list = [node]
if depth>0:
for neighbor in G.neighbors(node)
node_list += neigh_short(G, neighbor, depth-1)
return list(set(node_list)) # intermediate conversion to set to lose duplicates.
# example:
# find all neighbours with distance 2 from node 5:
n = neigh(G, node=5, depth=2)
# extract the respective subgraph from G and store in H
H = G.subgraph(n)