Skip to main content
`Ctrl`+`K`

# thresholded_random_geometric_graph

thresholded_random_geometric_graph(n, radius, theta, dim=2, pos=None, weight=None, p=2, seed=None, *, pos_name='pos', weight_name='weight')

  Returns a thresholded random geometric graph in the unit cube.

  The thresholded random geometric graph [1] model places `n` nodes uniformly at random in the unit cube of dimensions `dim`. Each node `u` is assigned a weight \(w_u\). Two nodes `u` and `v` are joined by an edge if they are within the maximum connection distance, `radius` computed by the `p`-Minkowski distance and the summation of weights \(w_u\) + \(w_v\) is greater than or equal to the threshold parameter `theta`.

  Edges within `radius` of each other are determined using a KDTree when SciPy is available. This reduces the time complexity from \(O(n^2)\) to \(O(n)\).

  Parameters:
    n int or iterable

      Number of nodes or iterable of nodes

    radius: float

      Distance threshold value

    theta: float

      Threshold value

    dim int, optional

      Dimension of graph

    pos dict, optional

      A dictionary keyed by node with node positions as values.

    weight dict, optional

      Node weights as a dictionary of numbers keyed by node.

    p float, optional (default 2)

      Which Minkowski distance metric to use. `p` has to meet the condition `1 <= 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 `p` of an Erdős-Rényi random graph, which represents probability.

    seed integer, random_state, or None (default)

      Indicator of random number generation state. See Randomness.

    pos_name string, default=”pos”

      The name of the node attribute which represents the position in 2D coordinates of the node in the returned graph.

    weight_name string, default=”weight”

      The name of the node attribute which represents the weight of the node in the returned graph.

  Returns:
    Graph

      A thresholded random geographic 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 the `pos` keyword argument or, if `pos` was not provided, as generated by this function. Similarly, each node has a nodethre attribute `'weight'` that stores the weight of that node as provided or as generated.

  Notes

  This uses a k-d tree to build the graph.

  The `pos` keyword 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

  If weights are not specified they are assigned to nodes by drawing randomly from the exponential distribution with rate parameter \(\lambda=1\). To specify weights from a different distribution, use the `weight` keyword argument:

      ::

      >>> import random
      >>> import math
      >>> n = 50
      >>> pos = {i: (random.gauss(0, 2), random.gauss(0, 2)) for i in range(n)}
      >>> w = {i: random.expovariate(5.0) for i in range(n)}
      >>> G = nx.thresholded_random_geometric_graph(n, 0.2, 0.1, 2, pos, w)

  References

  [1]

  http://cole-maclean.github.io/blog/files/thesis.pdf

  Examples

  Default Graph:

  G = nx.thresholded_random_geometric_graph(50, 0.2, 0.1)

  Custom Graph:

  Create a thresholded random geometric graph on 50 uniformly distributed nodes where nodes are joined by an edge if their sum weights drawn from a exponential distribution with rate = 5 are >= theta = 0.1 and their Euclidean distance is at most 0.2.