Skip to main content

symmetric_diffuse

Function symmetric_diffuse 

Source
pub fn symmetric_diffuse(
    graph: &Graph,
    signal: &[f64],
    k: usize,
) -> IgraphResult<Vec<f64>>
Expand description

Diffuse a signal using symmetric normalized propagation.

Computes D^{-1/2} A D^{-1/2} · signal, the GCN-style propagation operator (Kipf & Welling, 2017). Can be iterated k times for multi-hop smoothing.

§Parameters

  • graph — Undirected graph.
  • signal — Input signal of length vcount.
  • k — Number of propagation steps.

§Returns

The propagated signal after k steps.

§Examples

use rust_igraph::{Graph, symmetric_diffuse};

// Triangle: uniform signal is an eigenvector, stays unchanged
let g = Graph::from_edges(&[(0,1),(1,2),(0,2)], false, Some(3)).unwrap();
let signal = vec![1.0, 1.0, 1.0];
let out = symmetric_diffuse(&g, &signal, 1).unwrap();
for &v in &out {
    assert!((v - 1.0).abs() < 1e-10);
}