假设我们有一个列表列表,
master = [[1,2], [2,5], [3,5], [7,8], [11,8], [11,12]]
其中每个有序对是相关的,意味着 1,2是相关的,因此是2,5 ,它们遵循传递 属性,暗示,{ {1}}属于同一个群集。
问题是我们如何将上述列表聚合成相关元素?
主人的集群将是:
1,2,5
我正在使用Python并根据图表进行思考。效率越高越好。
答案 0 :(得分:1)
让主列表作为它们之间的点和边的记录。这意味着它们之间有8个点1,2,3,5,7,8,11,12和6个边缘。 以下代码可能会为您提供所需的内容。
import networkx
from networkx.algorithms.components.connected import connected_components
def to_graph(CL, edge):
G = networkx.Graph()
for part in CL:
G.add_nodes_from(part)
G.add_edges_from(edge)
return G
master = [[1,2], [2,5], [3,5], [7,8], [11,8], [11,12]]
G = to_graph(master, master)
for se in connected_components(G):
print list(se)
[1,2,3,5] [8,11,12,7]
您可以直接使用图表
import matplotlib.pyplot as plt
pos = networkx.shell_layout(G)
networkx.draw(G, pos)
plt.show()
答案 1 :(得分:0)
Scipy有一个适合此问题的连接组件实现,请参阅scipy.sparse.csgraph.connected_components。