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]])