dgl.radius_graph

dgl.radius_graph(x, r, p=2, self_loop=False, compute_mode='donot_use_mm_for_euclid_dist', get_distances=False)[source]

从一组点中构建一个图,这些点的邻居在给定距离内。

该函数将点集的坐标/特征转换为双向同构图。点集的坐标被指定为一个矩阵,其中行对应点,列对应坐标/特征维度。

返回的图的节点对应于点,其中每个点的邻居在给定距离内。

该函数需要PyTorch后端。

Parameters:
  • x (Tensor) – 点的坐标。它可以在CPU或GPU上。 点坐标的设备指定了半径图的设备, x[i] 对应于半径图中的第i个节点。

  • r (float) – 邻居的半径。

  • p (float, optional) –

    Minkowski度量的幂参数。当p = 1时,它相当于曼哈顿距离(L1范数),而当p = 2时,它相当于欧几里得距离(L2范数)。

    (默认值: 2)

  • self_loop (bool, optional) –

    半径图是否包含自环。

    (默认值: False)

  • compute_mode (str, optional) –

    use_mm_for_euclid_dist_if_necessary - 如果 P > 25 或 R > 25,将使用矩阵乘法方法计算欧几里得距离 (p = 2) use_mm_for_euclid_dist - 将始终使用矩阵乘法方法计算欧几里得距离 (p = 2) donot_use_mm_for_euclid_dist - 将永远不会使用矩阵乘法方法计算欧几里得距离 (p = 2)。

    (默认值: donot_use_mm_for_euclid_dist)

  • get_distances (bool, optional) –

    是否返回半径图中对应边的距离。

    (默认值: False)

Returns:

  • DGLGraph – 构建的图。节点ID的顺序与x相同。

  • torch.Tensor, optional – 构建图中边的距离。距离的顺序与边ID的顺序相同。

示例

以下示例使用 PyTorch 后端。

>>> import dgl
>>> import torch
>>> x = torch.tensor([[0.0, 0.0, 1.0],
...                   [1.0, 0.5, 0.5],
...                   [0.5, 0.2, 0.2],
...                   [0.3, 0.2, 0.4]])
>>> r_g = dgl.radius_graph(x, 0.75)  # Each node has neighbors within 0.75 distance
>>> r_g.edges()
(tensor([0, 1, 2, 2, 3, 3]), tensor([3, 2, 1, 3, 0, 2]))

get_distances 为 True 时,函数返回半径图和对应边的距离。

>>> x = torch.tensor([[0.0, 0.0, 1.0],
...                   [1.0, 0.5, 0.5],
...                   [0.5, 0.2, 0.2],
...                   [0.3, 0.2, 0.4]])
>>> r_g, dist = dgl.radius_graph(x, 0.75, get_distances=True)
>>> r_g.edges()
(tensor([0, 1, 2, 2, 3, 3]), tensor([3, 2, 1, 3, 0, 2]))
>>> dist
tensor([[0.7000],
        [0.6557],
        [0.6557],
        [0.2828],
        [0.7000],
        [0.2828]])