NewworkX中从邻接矩阵到二部图

2024-09-29 23:29:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csr矩阵,从中提取数据、行和列。 我想使用NetworkX创建一个二部图,并且我也尝试了几种没有成功的解决方案(例如:Plot bipartite graph using networkx in Python)。为什么它不起作用,在我看来,是一个标签的问题。我的两个集合和其中的节点没有字符串名称。你知道吗

例如,在10x10矩阵中,行/列索引表示两个集合的节点名称,而这些节点的交集是这些节点之间的加权链接。你知道吗

在我的例子中,如果(0,0)=0.5,这并不意味着它是一个自循环;相反,权重为0.5的链接将第一个集合的“节点0”与第二个集合的“节点0”连接起来。你知道吗

import networkx as nx
from networkx.algorithms import bipartite
import matplotlib.pyplot as plt

def function(foo, n_row, n_col):
    n_row=10
    n_col=10

在创建矩阵之后,我获得了我的数据


    weights = weights.tocsr() 
    wcoo = weights.tocoo()
    m_data = wcoo.data
    m_rows = wcoo.row
    m_cols = wcoo.col

    g = nx.Graph()  

    # TRIAL 1
    g.add_nodes_from(m_cols, bipartite=0)
    g.add_nodes_from(m_rows, bipartite=1)
    bi_m = bipartite.matrix.biadjacency_matrix(g, m_data)
    # TRIAL 2
    g.add_weighted_edges_from(zip(m_cols, m_rows, m_data))


    nx.draw(g, node_size=500)
    plt.show()

我期望一个二部图,每个图有两组10个节点,每个节点之间有一定数量的加权链接(同一组中没有链接)。 一、 相反,得到了一个经典的无向图,共有10个节点。你知道吗

同时,我希望尽可能优化我的代码,以加快计算时间而不影响可读性。你知道吗


Tags: fromimportnetworkxdata节点链接矩阵col

热门问题