【问题标题】:AttributeError: 'Graph' object has no attribute 'density'AttributeError:“图形”对象没有属性“密度”
【发布时间】:2017-11-30 14:10:40
【问题描述】:

我正在尝试学习如何使用 NetworkX,但遇到了问题。 尽管节点和边的函数可以正常工作,但整个图的函数却不能,从而导致 AttributeError。是我用错了还是你能看到其他问题?

前两个有效,但第三个无效。

num_of_nodes = 0
num_of_nodes = graph.number_of_nodes()
print num_of_nodes

num_of_edges = 0
num_of_edges = graph.number_of_edges()
print num_of_edges

density = 0
density = graph.density()
print density

谢谢。


进口:

import networkx as nx
from IPython.display import HTML
import numpy as np
import urllib3
import time
import operator
import socket
import cPickle
import re # regular expressions

from pandas import Series
import pandas as pd
from pandas import DataFrame

import matplotlib
import matplotlib.pyplot as plt
%matplotlib inline

【问题讨论】:

  • 您也可以在这里发布您的导入声明吗?没有它可以做出许多假设。
  • 顺便说一句,如果你重新绑定以下行中的变量,为什么要将num_of_nodesnum_of_edgesdensity设置为0
  • docsdensity()似乎是一个函数,而不是一个对象方法。所以你想要density(graph)。 (警告:我之前并没有真正使用过 networkx,我只是按照文档进行。)
  • 从您的包含中,我假设您需要使用nx.density(graph)
  • 有时您可以使用G.method(),其他时候可以使用nx.function(G)。在某种程度上,这只是程序员已经实现的一个问题。作为 networkx 的一般规则,我的经验是,如果您希望某些事情需要进行非平凡的计算,那么它就是 nx.function(G)。如果它更像是G 的属性,那么您可以使用G.method() [尽管我相信nx.function(G) 也会一直存在]。

标签: python networkx


【解决方案1】:

编辑(这个答案与 glibdud 在他的评论中的答案基本相同 - @glibdud,请随意添加您自己的这个答案版本,我会删除我的)


让我们先看看number_of_nodes。这是documentation。你称它为nx.number_of_nodes(G)。如果您检查source,它只会调用G.number_of_nodes()。所以请注意 - 这是两个不同的东西(尽管它们使用相同的名称),并产生相同的输出。一方面,G 是函数number_of_nodes 的参数,另一方面,number_of_nodesG 的方法。

但是,density 不作为G 的方法存在。它只是networkx的一个功能。这是documentation。你把它叫做nx.density(G)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2021-09-05
    • 2016-05-09
    • 2015-05-07
    • 2020-04-24
    • 1970-01-01
    相关资源
    最近更新 更多