random_k_out_graph#
- random_k_out_graph(n, k, alpha, self_loops=True, seed=None)[source]#
Returns a random
k-out graph with preferential attachment.Changed in version 3.5: Different implementations will be used based on whether NumPy is available. See Notes for details.
A random
k-out graph with preferential attachment is a multidigraph generated by the following algorithm.Begin with an empty digraph, and initially set each node to have weight
alpha.Choose a node
uwith out-degree less thankuniformly at random.Choose a node
vfrom with probability proportional to its weight.Add a directed edge from
utov, and increase the weight ofvby one.If each node has out-degree
k, halt, otherwise repeat from step 2.
For more information on this model of random graph, see [1].
- Parameters:
- nint
The number of nodes in the returned graph.
- kint
The out-degree of each node in the returned graph.
- alphafloat
A positive
floatrepresenting the initial weight of each vertex. A higher number means that in step 3 above, nodes will be chosen more like a true uniformly random sample, and a lower number means that nodes are more likely to be chosen as their in-degree increases. If this parameter is not positive, aValueErroris raised.- self_loopsbool
If True, self-loops are allowed when generating the graph.
- seedinteger, random_state, or None (default)
Indicator of random number generation state. See Randomness.
- Returns:
MultiDiGraphA
k-out-regular multidigraph generated according to the above algorithm.
- Raises:
- ValueError
If
alphais not positive.
Notes
The returned multidigraph may not be strongly connected, or even weakly connected.
random_k_out_graphhas two implementations: an array-based formulation that usesnumpy(_random_k_out_graph_numpy), and a pure-Python implementation (_random_k_out_graph_python). The NumPy implementation is more performant, especially for largen, and is therefore used by default. If NumPy is not installed in the environment, then the pure Python implementation is executed. However, you can explicitly control which implementation is executed by directly calling the corresponding function:# Use numpy if available, else Python nx.random_k_out_graph(1000, 5, alpha=1) # Use the numpy-based implementation (raises ImportError if numpy not installed) nx.generators.directed._random_k_out_graph_numpy(1000, 5, alpha=1) # Use the Python-based implementation nx.generators.directed._random_k_out_graph_python(1000, 5, alpha=1)
References
[1]Peterson, Nicholas R., and Boris Pittel. “Distance between two random
k-out digraphs, with and without preferential attachment.” arXiv preprint arXiv:1311.5961 (2013) <https://arxiv.org/abs/1311.5961>.