工具

用于图分析的各种工具。

转换图

sknetwork.utils.directed2undirected(adjacency: csr_matrix | SparseLR, weighted: bool = True) csr_matrix | SparseLR[source]

与有向图关联的无向图的邻接矩阵。

新邻接矩阵变为:

\(A+A^T\)(默认)

\(\max(A,A^T) > 0\)(二进制)

如果初始邻接矩阵 \(A\) 是二进制的,则双向边权重为 2(第一种方法,默认)或 1(第二种方法)。

参数:
  • adjacency – 邻接矩阵。

  • weighted – 如果为 True,则返回每条边的两个方向上的权重之和。

返回值:

新的邻接矩阵(与输入格式相同)。

返回类型:

new_adjacency

sknetwork.utils.bipartite2undirected(biadjacency: csr_matrix | SparseLR) csr_matrix | SparseLR[source]

由其双邻接矩阵定义的二部图的邻接矩阵。

返回的邻接矩阵是

\(A = \begin{bmatrix} 0 & B \\ B^T & 0 \end{bmatrix}\)

其中 \(B\) 是二部图的双邻接矩阵。

参数:

biadjacency – 图的双邻接矩阵。

返回值:

邻接矩阵(与输入格式相同)。

返回类型:

adjacency

sknetwork.utils.bipartite2directed(biadjacency: csr_matrix | SparseLR) csr_matrix | SparseLR[source]

与二部图(边从一个部分到另一个部分)关联的有向图的邻接矩阵。

返回的邻接矩阵是

\(A = \begin{bmatrix} 0 & B \\ 0 & 0 \end{bmatrix}\)

其中 \(B\) 是双邻接矩阵。

参数:

biadjacency – 图的双邻接矩阵。

返回值:

邻接矩阵(与输入格式相同)。

返回类型:

adjacency

邻域

sknetwork.utils.get_degrees(input_matrix: csr_matrix, transpose: bool = False) ndarray[source]

获取图的度向量。

如果图是有向的,则返回出度(后继者的数量)。设置 transpose=True 以获取入度(前驱者的数量)。

对于双邻接矩阵,返回行的度。设置 transpose=True 以获取列的度。

参数:
  • input_matrix (sparse.csr_matrix) – 邻接矩阵或双邻接矩阵。

  • transpose – 如果为 True,则转置输入矩阵。

返回值:

degrees – 度数组。

返回类型:

np.ndarray

示例

>>> from sknetwork.data import house
>>> adjacency = house()
>>> get_degrees(adjacency)
array([2, 3, 2, 2, 3], dtype=int32)
sknetwork.utils.get_weights(input_matrix: csr_matrix, transpose: bool = False) ndarray[source]

获取图的节点的权重向量。如果图没有加权,则返回度向量。

如果图是有向的,则返回出权重(传出链接的总权重)。设置 transpose=True 以获取入权重(传入链接的总权重)。

对于双邻接矩阵,返回行的权重。设置 transpose=True 以获取列的权重。

参数:
  • input_matrix (sparse.csr_matrix) – 邻接矩阵或双邻接矩阵。

  • transpose – 如果为 True,则转置输入矩阵。

返回值:

weights – 权重数组。

返回类型:

np.ndarray

示例

>>> from sknetwork.data import house
>>> adjacency = house()
>>> get_weights(adjacency)
array([2., 3., 2., 2., 3.])
sknetwork.utils.get_neighbors(input_matrix: csr_matrix, node: int, transpose: bool = False) ndarray[source]

获取节点的邻居。

如果图是有向的,则返回后继者向量。设置 transpose=True 以获取前驱者。

对于双邻接矩阵,返回行节点的邻居。设置 transpose=True 以获取列节点的邻居。

参数:
  • input_matrix (sparse.csr_matrix) – 邻接矩阵或双邻接矩阵。

  • node (int) – 目标节点。

  • transpose – 如果为 True,则转置输入矩阵。

返回值:

neighbors – 目标节点的邻居数组。

返回类型:

np.ndarray

示例

>>> from sknetwork.data import house
>>> adjacency = house()
>>> get_neighbors(adjacency, node=0)
array([1, 4], dtype=int32)

成员矩阵

sknetwork.utils.get_membership(labels: ~numpy.ndarray, dtype=<class 'bool'>, n_labels: int | None = None) csr_matrix[source]

构建标签分配的二进制矩阵,形状为 n_samples x n_labels。忽略负标签。

参数:
  • labels – 每个节点的标签(整数)。

  • dtype – 输出的类型。默认情况下为布尔值。

  • n_labels (int) – 标签数。

返回值:

membership – 标签分配的二进制矩阵。

返回类型:

sparse.csr_matrix

示例

>>> from sknetwork.utils import get_membership
>>> labels = np.array([0, 0, 1, 2])
>>> membership = get_membership(labels)
>>> membership.toarray().astype(int)
array([[1, 0, 0],
       [1, 0, 0],
       [0, 1, 0],
       [0, 0, 1]])
sknetwork.utils.from_membership(membership: csr_matrix) ndarray[source]

从成员矩阵(n_samples x n_labels)获取标签。没有标签的样本获取 -1。

参数:

成员关系 – 成员关系矩阵。

返回值:

标签 – 标签(成员关系矩阵的列索引)。

返回类型:

np.ndarray

示例

>>> from scipy import sparse
>>> from sknetwork.utils import from_membership
>>> membership = sparse.eye(3).tocsr()
>>> labels = from_membership(membership)
>>> labels
array([0, 1, 2])

TF-IDF

sknetwork.utils.get_tfidf(count_matrix: csr_matrix)[source]

从稀疏格式的计数矩阵获取 tf-idf。

参数:

count_matrix (sparse.csr_matrix) – 计数矩阵,形状为 (n_documents, n_words)。

返回值:

tf_idf – tf-idf 矩阵,形状为 (n_documents, n_words)。

返回类型:

sparse.csr_matrix

参考文献

https://en.wikipedia.org/wiki/Tfidf