soft_random_geometric_graph#
- soft_random_geometric_graph(n, radius, dim=2, pos=None, p=2, p_dist=None, seed=None)[source]#
Returns a soft random geometric graph in the unit cube.
The soft random geometric graph [1] model places
nnodes uniformly at random in the unit cube in dimensiondim. Two nodes of distance,dist, computed by thep-Minkowski distance metric are joined by an edge with probabilityp_distif the computed distance metric value of the nodes is at mostradius, otherwise they are not joined.Edges within
radiusof each other are determined using a KDTree when SciPy is available. This reduces the time complexity from \(O(n^2)\) to \(O(n)\).- Parameters:
- nint or iterable
Number of nodes or iterable of nodes
- radius: float
Distance threshold value
- dimint, optional
Dimension of graph
- posdict, optional
A dictionary keyed by node with node positions as values.
- pfloat, optional
Which Minkowski distance metric to use.
phas to meet the condition1 <= p <= infinity.If this argument is not specified, the \(L^2\) metric (the Euclidean distance metric), p = 2 is used.
This should not be confused with the
pof an Erdős-Rényi random graph, which represents probability.- p_distfunction, optional
A probability density function computing the probability of connecting two nodes that are of distance, dist, computed by the Minkowski distance metric. The probability density function,
p_dist, must be any function that takes the metric value as input and outputs a single probability value between 0-1. The scipy.stats package has many probability distribution functions implemented and tools for custom probability distribution definitions [2], and passing the .pdf method of scipy.stats distributions can be used here. If the probability function,p_dist, is not supplied, the default function is an exponential distribution with rate parameter \(\lambda=1\).- seedinteger, random_state, or None (default)
Indicator of random number generation state. See Randomness.
- Returns:
- Graph
A soft random geometric graph, undirected and without self-loops. Each node has a node attribute
'pos'that stores the position of that node in Euclidean space as provided by theposkeyword argument or, ifposwas not provided, as generated by this function.
Notes
This uses a k-d tree to build the graph.
The
poskeyword argument can be used to specify node positions so you can create an arbitrary distribution and domain for positions.For example, to use a 2D Gaussian distribution of node positions with mean (0, 0) and standard deviation 2
The scipy.stats package can be used to define the probability distribution with the .pdf method used as
p_dist.>>> import random >>> import math >>> n = 100 >>> pos = {i: (random.gauss(0, 2), random.gauss(0, 2)) for i in range(n)} >>> p_dist = lambda dist: math.exp(-dist) >>> G = nx.soft_random_geometric_graph(n, 0.2, pos=pos, p_dist=p_dist)
References
[1]Penrose, Mathew D. “Connectivity of soft random geometric graphs.” The Annals of Applied Probability 26.2 (2016): 986-1028.
[2]scipy.stats - https://docs.scipy.org/doc/scipy/reference/tutorial/stats.html
Examples
Default Graph:
G = nx.soft_random_geometric_graph(50, 0.2)
Custom Graph:
Create a soft random geometric graph on 100 uniformly distributed nodes where nodes are joined by an edge with probability computed from an exponential distribution with rate parameter \(\lambda=1\) if their Euclidean distance is at most 0.2.