如何可视化使用networkx创建的邻接矩阵

2024-09-26 18:07:54 发布

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

我使用networkx创建了一个邻接矩阵,如下所示:

from networkx.algorithms.bipartite.matrix import biadjacency_matrix as adj
user_node_list = data['user_id'].unique()
item_node_list = data['item_id'].unique()
adj_matrix = adj(B, user_node_list, column_order=item_node_list, dtype=None, weight='rating', format='csr')

我想把这个调整矩阵形象化。我该怎么做


Tags: fromimportnetworkxidnodedataitemmatrix
2条回答

您可以使用熊猫来可视化调整矩阵,如下所示:

import pandas as pd
A = pd.DataFrame(adj_matrix)

大部分时间我们都在处理具有稀疏邻接矩阵的图,因此networkx返回的是SciPy Compressed Sparse Row matrix,而不是numpy.ndarraynumpy.matrix。前者使用更高效的数据结构和算法来表示和处理稀疏矩阵。特别是基质的^{} representation不同于香草(致密)NumPy基质。看起来像

<11x11 sparse matrix of type '<class 'numpy.int64'>'
    with 28 stored elements in Compressed Sparse Row format>

这是有意义的,因为如果CSR矩阵的表示与密集矩阵相同,那么如果矩阵非常大,则简单的打印语句或日志消息可能会对性能产生严重影响

将上述输出与普通(密集)NumPy矩阵的__repr__输出进行比较:

matrix([[0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
        [1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0],
        [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1],
        [0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0],
        [0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0],
        [0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
        [0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
        [0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0],
        [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0],
        [0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1],
        [0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0]])

这使我们能够直观地检查矩阵元素(我猜这就是“可视化调整矩阵”的意思)

要将稀疏CSR矩阵转换为密集NumPy矩阵,只需执行sparse_matrix.todense()。请注意,稀疏矩阵的这种表示形式将需要更多的内存,因此在处理较大的图形时请注意这一点

相关问题 更多 >

    热门问题