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 后端。
- 参数:
x (Tensor) – 点坐标。可以在 CPU 或 GPU 上。点坐标所在的设备指定了半径图所在的设备,
x[i]
对应于半径图中的第 i 个节点。r (float) – 邻居的半径。
p (float, 可选) –
闵可夫斯基度量的幂参数。当
p = 1
时,它等同于曼哈顿距离 (L1 范数);当p = 2
时,等同于欧几里得距离 (L2 范数)。(默认: 2)
self_loop (bool, 可选) –
半径图是否包含自环。
(默认: False)
compute_mode (str, 可选) –
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, 可选) –
是否返回半径图中对应边的距离。
(默认: False)
- 返回:
DGLGraph – 构造的图。节点 ID 与
x
的顺序相同。torch.Tensor, 可选 – 构造图中边的距离。距离与边 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]])