graph_sym_difference#
- graph_tool.generation.graph_sym_difference(g1, g2, eweight1=None, eweight2=None, vmap='identity', props=[], mt='set', internal_props=False, in_place=False, **kwargs)[source]#
Return a graph containing the symmetric difference of the edges of graphs
g1
andg2
.- Parameters:
- g1
Graph
Graph to be merged into.
- g2
Graph
Graph to be merged from.
- eweight1
EdgePropertyMap
(optional, default:None
) If provided, this will determine the weights of the edges of graph
g1
. If not provided, each edge will be assumed to have unity weight.- eweight2
EdgePropertyMap
(optional, default:None
) If provided, this will determine the weights of the edges of graph
g2
. If not provided, each edge will be assumed to have unity weight.- vmap
VertexPropertyMap
,"identity"
, orNone
(optional, default:None
) Vertex property map owned by
g2
which maps each of its vertices to vertex indices belonging tog1
, in which case they are considered to be identical. Negative values mean no mapping exists, and thus both vertices ing1
andg2
will be present in the difference graph. If this argument is not provided (i.e.vmap
isNone
), both vertex sets will be added to the difference. Ifvmap
isg2.vertex_index
, and the vertex indexes are identical in both graphs, the difference will correspond only to the edge sets. A special value ofvmap == "identity"
is a shortcut forvmap = g2.vertex_index
.- propslist of tuples of
PropertyMap
(optional, default:[]
) Property maps to be included in the difference. Each element of th list must be a pair of
PropertyMap
objects. The first element must be a property ofg1
, and the second ofg2
. If either value isNone
, an new map will be created, and set to appropriately empty values.- mt
str
(otional, default:"set"
) Merge rule for property values. Should be one of
"set"
,"sum"
,"diff"
,"idx_inc"
,"append"
,"concat"
. Seegraph_merge()
for further documentation.- internal_props
bool
(optional, default:False
) If
True
all internal property maps ofg1
andg2
will be included in the difference.- in_place
bool
(optional, default:False
) If
True
, the symmetric difference is computed in-place intog1
, which is then modified. IfFalse
, a new graph is created, and both graphs remain unmodified.- **kwargs
dict
(optional, default:{}
) Remaining keyword parameters will be forwarded to
graph_merge()
.
- g1
- Returns:
- ug
Graph
The symmetric difference graph.
- w
EdgePropertyMap
The edge weights of the difference graph. This is only returned if
eweight1
is notNone
.- propslist of
PropertyMap
objects List of properties in the difference graph. This is only returned if props is not empty. Internal property maps are not included in this list.
- ug
See also
graph_merge
Merge the edge sets between two graphs.
graph_union
Union of the edge sets between two graphs.
graph_difference
Difference of the edge sets between two graphs.
graph_intersection
Intersection of the edge sets between two graphs.
Notes
This algorithm is a wrapper around
graph_merge()
, and shares with it the same algorithmic complexity.Parallel implementation.
If enabled during compilation, this algorithm will run in parallel using OpenMP. See the parallel algorithms section for information about how to control several aspects of parallelization.
Examples
>>> g = gt.collection.ns["lesmis"] >>> u1 = gt.GraphView(g, efilt=np.random.random(g.num_edges()) < .5) >>> u2 = gt.GraphView(g, efilt=np.random.random(g.num_edges()) < .5) >>> u = gt.graph_sym_difference(u1, u2) >>> gt.graph_draw(u1, pos=g.vp._pos, output="u1.pdf") <...> >>> gt.graph_draw(u2, pos=g.vp._pos, output="u2.pdf") <...> >>> gt.graph_draw(u, pos=g.vp._pos, output="gsdiff.pdf") <...>