加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何获取csr矩阵的跟踪

发布时间:2020-12-20 12:10:40 所属栏目:Python 来源:网络整理
导读:我在 python和命令中使用networkx A = nx.adjacency_matrix(G) 返回csr矩阵,而不是2D数组.因此,当我尝试做的时候 np.trace(A) 我收到一个错误: Traceback (most recent call last): File "stdin",line 1,in module File "/usr/lib/python3/dist-packages/nu
我在 python和命令中使用networkx

A = nx.adjacency_matrix(G)

返回csr矩阵,而不是2D数组.因此,当我尝试做的时候

np.trace(A)

我收到一个错误:

Traceback (most recent call last):
  File "<stdin>",line 1,in <module>
  File "/usr/lib/python3/dist-packages/numpy/core/fromnumeric.py",line 1279,in trace
    return asarray(a).trace(offset,axis1,axis2,dtype,out)
ValueError: diag requires an array of at least two dimensions

我该如何绕过去追踪?

解决方法

不要使用矩阵. networkx有 nodes_with_selfloops方法列出具有自循环的节点:

>>> import networkx
>>> G = networkx.Graph()
>>> G.add_node(1)
>>> G.add_node(2)
>>> G.add_node(3)
>>> G.add_edge(2,2)
>>> G.add_edge(1,3)
>>> G.nodes_with_selfloops()
[2]

如果图形未加权,则跟踪将只是列表中的项目数,因此您可以执行以下操作:

>>> len(G.nodes_with_selfloops())
1

如果它是加权的,你可以加总每个自循环的权重:

>>> import networkx
>>> G = networkx.Graph()
>>> G.add_node(1)
>>> G.add_node(2)
>>> G.add_node(3)
>>> G.add_edge(1,1,weight=2)
>>> G.add_edge(2,2,weight=1.5)
>>> sum(G.get_edge_data(node,node)['weight'] for node in G.nodes_with_selfloops())
3.5

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读