node_dict_factory : function, (default: dict)
Factory function to be used to create the outer-most dict
in the data structure that holds adjacency lists keyed by node.
It should require no arguments and return a dict-like object.
adjlist_dict_factory : function, (default: dict)
Factory function to be used to create the adjacency list
dict which holds edge data keyed by neighbor.
It should require no arguments and return a dict-like object
edge_attr_dict_factory : function, (default: dict)
Factory function to be used to create the edge attribute
dict which holds attrbute values keyed by attribute name.
It should require no arguments and return a dict-like object.
我将发布为外部存储设置NetworkX的细微差别。Kikohs指出每一本字典都有工厂,这是正确的。这些可以被覆盖。在
对于持久化存储,真正需要特别注意的字典是节点字典。在
必须特别注意dict类实现的行为。NetworkX类中有一些代码可以更改内存中从字典返回的值,而无需将其设置回原处。在
例如:
这些值不会保留回存储后端。为了适应这种情况,我使用了一个内存缓存,它将对象保存在内存中,当对象被逐出时,它会将它们写入底层存储。在
对于我使用的内存缓存
cachetools
。有关逐出,请参见:Python functools.lru_cache eviction callback or equivalent对于底层存储,我使用了
plyvel
(https://plyvel.readthedocs.org/en/latest/),这是LevelDB的Python接口。在下面我还给出了字典的实现。注意,代码中仍然存在错误和bug,并且还没有经过正确的测试,但是您已经了解了基本的概念。在
^{pr2}$图形类:
应该可以通过子类化Graph类并提供用户定义的工厂函数来扩展networkx。 这些函数可以查询数据库并将结果缓存到networkx使用的字典中。在
我在联机文档中找不到这些行,但是在code中有:
子类(高级):
Graph类使用dict的dict数据结构。在
外部dict(node_dict)保存由节点键控的邻接列表。 下一个dict(adjlist)表示邻接列表并保持不变 由邻居键控的边缘数据。内部dict(edge_attr)表示 边数据,并保存由属性名设置关键帧的边属性值。在
这三个dict中的每一个都可以由用户定义的替换 dict-like对象。一般来说,dict类的特性应该是 维护,但可以添加额外的功能。替换其中一个 dicts通过更改类(!)来创建一个新的图形类变量 控制着工厂。变量名 分别是node-tu-dict-factory、adjlist-tu-dict-factory和edge-attr-dict-factory。在
我不知道networkx有任何官方扩展。在
相关问题 更多 >
编程相关推荐