/ / Domande di igraph multi-edge python - python, igraph

Domande di igraph python multi bordo - python, igraph

Se si dispone di un grafico ponderato multi edge orientato, come si fa a fare queste cose?

  1. Per i vertici I e J, elencare tutti i bordi da I a J.
  2. Elimina tutti i bordi del grafico con un peso superiore a 10.

Per 1 posso elencare tutti i bordi in uscita e poifiltro per nodo di destinazione. Questo sembra potenzialmente inefficiente, c'è un modo per ottenere direttamente i bordi? Per 2 posso elencare tutti i bordi, cercare ogni peso e quindi eliminare il bordo se necessario. C'è un modo pulito e idiomatico di farlo?

risposte:

4 per risposta № 1

Per quanto riguarda il n. 1, sfortunatamente non è più facilesoluzione rispetto a quella che hai citato (cioè interrogando tutti i bordi in uscita e poi filtrando in base alla destinazione). Il nucleo C di igraph ha una funzione chiamata igraph_get_eids_multi che farebbe quello che vuoi, ma non esiste un'interfaccia Python corrispondente per la funzione.

Per quanto riguarda il n. 2, puoi farlo (presumendo ciò g è il tuo oggetto grafico, weight è il nome dell'attributo edge che tiene i pesi, e gt sta per "maggiore di"):

g.es.select(weight_gt=10).delete()

dove g.es rappresenta la sequenza di bordo dell'intero grafico, e il suo select il metodo sostituisce la sequenza di spigoli in base ad alcuni criteri (vedere la documentazione di EdgeSeq.select per maggiori dettagli), restituendo un altro EdgeSeq. Il delete() il metodo della sequenza di bordo filtrata elimina i bordi.