Se si dispone di un grafico ponderato multi edge orientato, come si fa a fare queste cose?
- Per i vertici I e J, elencare tutti i bordi da I a J.
- 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 № 1Per 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.