Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have an undirected graph $G$. How would I randomly assign directions to some fraction $p$ of the edges? How might I do this efficiently / quickly provided I have a large graph structure?

For example, to assign a graph random edge weights, I might write:

GraphWithRandomWeights = Graph[EdgeList[G], EdgeWeight -> Table[RandomReal[{-1, 1}], {abc, 1, Length[EdgeList[G]]}]];
share|improve this question
A similar question was asked in the middle of this question. – Sjoerd C. de Vries Apr 21 '13 at 20:41
up vote 8 down vote accepted

There is a built-in function DirectedGraph[ (*your undirected graph*) , "Random"] for this job:

myGraph = RandomGraph[{10, 13},
  VertexLabels -> Table[v -> Style[v, 20], {v, 10}],
  ImagePadding -> 20, VertexSize -> Medium]


DirectedGraph[myGraph, "Random"]


(Note the layout may not be the same as myGraph.)


As OP asked in a comment, if you only want a fraction of the total edges to be directed, then the best way might be to manipulate the adjacency matrix:

myAdj = AdjacencyMatrix[myGraph]


Suppose the edges we want to become directed are those between vertices $2\sim 4$, $1\sim 9$, $1\sim 10$, $5\sim 7$:

directEdgeSet = {{2, 4}, {1, 9}, {1, 10}, {5, 7}};

So a randomly constructed directed adjacency matrix would be:

myDirectAdj = ReplacePart[myAdj,
      Thread[RandomSample /@ directEdgeSet -> 0]


The corresponding graph is

 DirectedEdges -> True,
 VertexLabels -> Table[v -> Style[v, 20], {v, 10}],
 ImagePadding -> 20, VertexSize -> Medium]

my partial directed graph

share|improve this answer
@Sylvia is it possible for me to only direct a fraction of the total edges? – Peter Apr 21 '13 at 19:10
@Peter Directed edges and undirected edges can not coexist in a same graph by definition. Please compare the difference of AdjacencyGraph[{{0, 1}, {1, 0}}, DirectedEdges -> True] and AdjacencyGraph[{{0, 1}, {1, 0}}]. – Silvia Apr 21 '13 at 19:32
Got it, thanks! – Peter Apr 21 '13 at 19:45
@Peter You're welcome. – Silvia Apr 21 '13 at 19:53

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.