2017-09-04 69 views
0

graph-tool中爲了實現一個類的行爲而子類同時可用graph-tool中的Graph,Vertex和Edge類可行嗎?某些類型的圖表,如社交網絡?
更具體而言,我想有一個class CollaborationNetwork(Graph)包含class Authored(Edge)class Person(Vertex)實例,class Publication(Vertex),等
我想像,Person和公開頂點由一個property_map識別,而格拉夫方法裹成的add_authorship(Person, Publication)喜歡創建一個Authored的實例。同時對python圖形工具中的Graph,Vertex和Edge進行子分類

我不確定的是,如果基於graph-tool來實現這樣的抽象是有意義的,並且如果是的話,如何將CollaborationNetwork連接到Vertex和Edge的子類。 (我知道只有Subclassing Graph from the graph_tool package可以工作)。

關於動機:
我將模擬一個社交網絡的發展,並將與實際數據被存儲爲一個Neo4j的圖來比較吧。 我喜歡py2neo OGM方法,它將這些Person和Publication數據表示爲python對象。

回答

0

這是可能的,但我沒有看到這樣做的任何真正的優勢。

子類Vertex是容易的,但有幾個Edge類,取決於閹羊圖形被定向或過濾。爲了使其工作,您必須在衍生類中包裝Graph方法,該方法返回VertexEdge對象(或其迭代器),以便將它們轉換爲您的派生的EdgeVertex對象。

做這一切只是爲了讓班級有不同的名字,我覺得好像浪費了精力。但這不是不可能的。

一個更簡單的策略是創建一個單獨的類(例如CitationGraph),該類不包含Graph,而是包含一個實例。然後,您可以實施便利功能,如add_personadd_publication,它們可以執行您的基本操作,同時允許您隨時訪問底層的Graph。這樣做可以防止很多令人頭痛的問題,甚至可以免費爲您提供類似pickle的支持。

+0

謝謝,蒂亞戈。這完全回答了我的問題! 我懷疑即使可能,「對象圖映射」方法也是一種矯枉過正。 關於您關於包含Graph實例的建議,我們已經有這方面的經驗,它的工作原理非常好:[scientificometric-graph-tool](https://github.com/nanumyan/scientometric-graph-tool) –

相關問題