Zeilen in Numpy-Array löschen, die Elemente enthalten, welche bestimmte Kriterien erfüllen
Verfasst: Donnerstag 26. November 2015, 12:04
Hallo zusammen,
ich habe folgendes numpy Array:
Die Zahlen stellen Knoten in einem Netzwerk dar, jede Zeile im Array ist eine Kante im Netzwerk. Zur Vereinfachung des Netzwerks möchte ich Knoten löschen, die nur Eckpunkte der Kanten oder Endpunkte sind.

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
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