This documents an unmaintained version of NetworkX. Please upgrade to a maintained version and see the current NetworkX documentation.


cartesian_product(G, H)[source]

Returns the Cartesian product of G and H.

The Cartesian product \(P\) of the graphs \(G\) and \(H\) has a node set that is the Cartesian product of the node sets, \(V(P)=V(G) \times V(H)\). \(P\) has an edge \(((u,v),(x,y))\) if and only if either \(u\) is equal to \(x\) and both \(v\) and \(y\) are adjacent in \(H\) or if \(v\) is equal to \(y\) and both \(u\) and \(x\) are adjacent in \(G\).

Parameters:G, H (graphs) – Networkx graphs.
Returns:P – The Cartesian product of G and H. P will be a multi-graph if either G or H is a multi-graph. Will be a directed if G and H are directed, and undirected if G and H are undirected.
Return type:NetworkX graph
Raises:NetworkXError – If G and H are not both directed or both undirected.


Node attributes in P are two-tuple of the G and H node attributes. Missing attributes are assigned None.


>>> G = nx.Graph()
>>> H = nx.Graph()
>>> G.add_node(0, a1=True)
>>> H.add_node('a', a2='Spam')
>>> P = nx.cartesian_product(G, H)
>>> list(P)
[(0, 'a')]

Edge attributes and edge keys (for multigraphs) are also copied to the new product graph