سؤال

أنا أكتب البرامج النصية التي تقرأ في الرسوم البيانية من تنسيق GEXF ، وإضافة العقد والحواف ، واكتبها مرة أخرى إلى GEXF. مشكلتي هي أن Write_gexf يعطي الحواف التي أضيفها معرف الحافة الموجود بالفعل في الحواف التي قرأتها.

على سبيل المثال ، افترض أنني قرأت في رسم بياني G مع حافة واحدة.

>>> import networkx as nx
>>> G = nx.read_gexf('first.gexf')
>>> G.edges(data=True)
[(0,1, {'id': '0'})] 

ثم أضيف حافة وأكتب الرسم البياني إلى GEXF:

>>> G.add_edge(1,2)
>>> G.edges(data=True)
[('0','1', {'id': '0'}), (1,2, {})]
>>> nx.write_gexf(G,'second.gexf')

الآن إذا قرأت في "Second.gexf" أحصل على حوافين مع "ID" على قدم المساواة "0".

>>> H = nx.read_gexf('second.gexf')
>>> H.edges(data=True)
[('0','1', {'id': '0'}), ('1','2', {'id': '0'})]

هل هناك طريقة لتجنب ذلك؟

هل كانت مفيدة؟

المحلول

يقوم كاتب NetworkX GEXF بإنشاء معرف الحافة - الأعداد الصحيحة تبدأ من 0 - إذا لم يتم تحديد واحد. نظرًا لأنك أضفت حافة ثانية بدون معرف (Edge 1،2) تم استخدام معرف 0 والذي يصطدم بمعرف الحافة الأول.

قد يكون هذا خطأ وبالتأكيد يسبب مشكلة في حالة الاستخدام الخاصة بك. أحد الحلول هو ضبط معرف الحافة بشكل صريح عند إضافة العقدة.

In [1]: import networkx as nx

In [2]: G = nx.read_gexf('first.gexf')

In [3]: G.edges(data=True)
Out[3]: [('1', '0', {'id': '0'})]

In [4]: G.add_edge(1,2,id=1)

In [5]: G.edges(data=True)
Out[5]: [('1', '0', {'id': '0'}), (2, 1, {'id': 1})]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top