mindspore_gl.graph.add_self_loop

mindspore_gl.graph.add_self_loop(edge_index, edge_weight, node, fill_value, mode='dense')[源代码]

从输入COO矩阵中添加自循环。 可以选择对dense矩阵或COO格式的矩阵进行操作。

参数:
  • edge_index (Tensor) - 边索引。shape为 \((2, N\_e)\) 其中 \(N\_e\) 是边的数量。

  • edge_weight (Tensor) - 边权重。shape为 \((N\_e)\) 其中 \(N\_e\) 是边的数量。

  • node (int) - 节点数。

  • fill_value (Tensor) - 自循环值。

  • mode (str, 可选) - 操作矩阵的类型。支持的类型为’dense’和’coo’。默认值:’dense’。

返回:

如果 mode 等于’dense’:

  • new_adj (Tensor) - 添加对角矩阵后的对象。

如果 mode 等于’coo’:

  • edge_index (Tensor) - 新的边索引。

  • edge_weight (Tensor) - 新的边权重。

异常:
  • ValueError - 如果 mode 不是’coo’或’dense’格式。

  • TypeError - 如果 node 不是正整数。

  • ValueError - 如果 fill_value 长度不等于 node

支持平台:

Ascend GPU

样例:

>>> from mindspore import Tensor
>>> from mindspore_gl.graph import add_self_loop
>>> edge_index = [[1, 1, 2, 2], [0, 2, 0, 1]]
>>> edge_index = ms.Tensor(edge_index, ms.int32)
>>> edge_weight = Tensor([1, 1, 1, 1], ms.float32)
>>> node = 3
>>> fill_value = Tensor([2, 2, 2], ms.float32)
>>> new_adj = add_self_loop(edge_index, edge_weight, node, fill_value, mode='dense')
>>> print(new_adj)
[[2. 0. 0.]
[1. 2. 1.]
[1. 1. 2.]]
>>> edge_index, edge_weight = add_self_loop(edge_index, edge_weight, node, fill_value, mode='coo')
>>> print(edge_index)
[[1 1 2 2 0 1 2]
[0 2 0 1 0 1 2]]
>>> print(edge_weight)
[1. 1. 1. 1. 2. 2. 2.]