ich habe folgendes numpy Array:
Code: Alles auswählen
edge_array =
[[10 11]
[11 12]
[12 13]
[13 14]
[14 15]
[15 16]
[16 22]
[12 20]
[20 21]
[21 22]
[22 23]
[23 30]
[30 31]
[31 32]
[32 33]
[33 34]
[34 31]
[31 32]
[21 40]
[40 41]
[41 42]
[42 23]
[15 32]
Ziel ist es also, in diesem Array die Kanten (Zeilen) zu löschen, in denen Knoten enthalten sind, die im gesamten Array nur ein- oder zweimal vorkommen (z.B. 10, 11, 13, 14, 16 ...). Stattdessen sollen dann Kanten eingefügt werden, welche die gelöschten Kanten ersetzen.
Beispielsweise sollen die Kanten [12,13] , [13,14] und [14,15] gelöscht werden und dafür die Kante [12,15] eingefügt werden.
Problematisch ist auch folgendes Szenario: es würden die Kanten [10,11], [11,12] gelöscht werden, weil sie eine Art Sackgasse darstellen. Dadurch würde aber auch der Knoten 12 nur noch an zwei Kanten angrenzen. Da er aber im ursprünglichen Netz eine Kreuzung darstellt, soll er nicht gelöscht werden! Es muss sich beim Löschen also immer auf das Ausgangsnetzwerk bezogen werden.
Als totaler Python-Neuling habe ich hiermit meine Probleme. Vielleicht könnte man irgendwie mit edge_array.flat über das Array iterieren, dann mit np.sum die Knoten zählen und mit np.delete gewisse Zeilen löschen. Aber ich habe auch in der Numpydokumentation gelesen, dass man in einigen fällen mit nditer iteriert.
Das ganze soll dann natürlich auf größere Netzwerke anwendbar sein, der Einfachheit halber ist dies nur ein kleines Beispielhaftes Netzwerk.
Kann jemand weiterhelfen?
Danke, Michael