线性代数

线性代数工具。

归一化

sknetwork.linalg.normalize(matrix: csr_matrix | ndarray | LinearOperator, p=1)[source]

将矩阵的行归一化,使其所有行都具有范数 1(或 0;空行保持为空)。

参数:
  • matrix – 输入矩阵。

  • p – 范数的阶。

返回值:

归一化后的矩阵(与输入矩阵格式相同)。

返回类型:

归一化后的矩阵

sknetwork.linalg.diagonal_pseudo_inverse(weights: ndarray) csr_matrix[source]

计算 \(\text{diag}(w)^+\),即对角矩阵的伪逆,该对角矩阵的对角元素由权重 \(w\) 给出。

参数:

weights – 要反转的权重。

返回类型:

sparse.csr_matrix

稀疏 + 低秩

class sknetwork.linalg.SparseLR(*args, **kwargs)[source]

用于具有“稀疏 + 低秩”结构的矩阵的类。示例

\(A + xy^T\)

参数:
  • sparse_mat (scipy.spmatrix) – 稀疏成分。自动转换为 csr 格式。

  • low_rank_tuples (list) – 数组的单元组或元组列表,表示低秩成分 [(x1, y1), (x2, y2),… ]。每个低秩成分的形式为 \(xy^T\)

示例

>>> from scipy import sparse
>>> from sknetwork.linalg import SparseLR
>>> adjacency = sparse.eye(2, format='csr')
>>> slr = SparseLR(adjacency, (np.ones(2), np.ones(2)))
>>> x = np.ones(2)
>>> slr.dot(x)
array([3., 3.])
>>> slr.sum(axis=0)
array([3., 3.])
>>> slr.sum(axis=1)
array([3., 3.])
>>> slr.sum()
6.0

参考文献

De Lara (2019)。用于基于矩阵分解的图算法的稀疏 + 低秩技巧。第 15 届图挖掘与学习国际研讨会 (MLG) 论文集。

property H

厄米特伴随。

返回 self 的厄米特伴随,也称为厄米特共轭或厄米特转置。对于复矩阵,厄米特伴随等于共轭转置。

可以使用 self.H 作为 self.adjoint() 的简写形式。

返回值:

A_H – self 的厄米特伴随。

返回类型:

LinearOperator

property T

转置此线性运算符。

返回一个 LinearOperator,它表示此线性运算符的转置。可以使用 self.T 作为 self.transpose() 的简写形式。

adjoint()

厄米特伴随。

返回 self 的厄米特伴随,也称为厄米特共轭或厄米特转置。对于复矩阵,厄米特伴随等于共轭转置。

可以使用 self.H 作为 self.adjoint() 的简写形式。

返回值:

A_H – self 的厄米特伴随。

返回类型:

LinearOperator

astype(dtype: str | dtype)[source]

更改对象的 dtype。

dot(x)

矩阵 - 矩阵或矩阵 - 向量乘法。

参数:

x (array_like) – 1 维或 2 维数组,表示向量或矩阵。

返回值:

Ax – 1 维或 2 维数组(取决于 x 的形状),表示将此线性运算符应用于 x 的结果。

返回类型:

array

left_sparse_dot(matrix: csr_matrix)[source]

与稀疏矩阵的左点积。

matmat(X)

矩阵 - 矩阵乘法。

执行运算 y=A*X,其中 A 是 MxN 线性运算符,X 是密集的 N*K 矩阵或 ndarray。

参数:

X ({matrix, ndarray}) – 形状为 (N,K) 的数组。

返回值:

Y – 形状为 (M,K) 的矩阵或 ndarray,取决于 X 参数的类型。

返回类型:

{matrix, ndarray}

注意

此 matmat 包装任何用户指定的 matmat 例程或被重写的 _matmat 方法,以确保 y 具有正确的类型。

matvec(x)

矩阵 - 向量乘法。

执行运算 y=A*x,其中 A 是 MxN 线性运算符,x 是列向量或 1 维数组。

参数:

x ({matrix, ndarray}) – 形状为 (N,) 或 (N,1) 的数组。

返回值:

y – 形状为 (M,) 或 (M,1) 的矩阵或 ndarray,取决于 x 参数的类型和形状。

返回类型:

{matrix, ndarray}

注意

此 matvec 包装用户指定的 matvec 例程或被重写的 _matvec 方法,以确保 y 具有正确的形状和类型。

right_sparse_dot(matrix: csr_matrix)[source]

与稀疏矩阵的右点积。

rmatmat(X)

伴随矩阵 - 矩阵乘法。

执行运算 y = A^H * x,其中 A 是 MxN 线性运算符,x 是列向量或 1 维数组,或 2 维数组。默认实现委托给伴随。

参数:

X ({matrix, ndarray}) – 矩阵或 2D 数组。

返回值:

Y – 矩阵或 2D 数组,取决于输入的类型。

返回类型:

{matrix, ndarray}

注意

此 rmatmat 包装用户指定的 rmatmat 例程。

rmatvec(x)

伴随矩阵 - 向量乘法。

执行运算 y = A^H * x,其中 A 是 MxN 线性运算符,x 是列向量或 1 维数组。

参数:

x ({matrix, ndarray}) – 形状为 (M,) 或 (M,1) 的数组。

返回值:

y – 形状为 (N,) 或 (N,1) 的矩阵或 ndarray,取决于 x 参数的类型和形状。

返回类型:

{matrix, ndarray}

注意

此 rmatvec 包装用户指定的 rmatvec 例程或被重写的 _rmatvec 方法,以确保 y 具有正确的形状和类型。

sum(axis=None)[source]

运算符系数的按行、按列或总和。

参数:

axis – 如果为 0,则返回按列的和。如果为 1,则返回按行的和。否则,返回总和。

transpose()

转置此线性运算符。

返回一个 LinearOperator,它表示此线性运算符的转置。可以使用 self.T 作为 self.transpose() 的简写形式。

求解器

class sknetwork.linalg.LanczosEig(which='LM', n_iter: int | None = None, tol: float = 0.0)[source]

使用 Lanczos 方法的特征值求解器。

参数:
  • which (str) –

    要查找的特征向量和特征值

    • 'LM' : 模块最大特征值。

    • 'SM' : 模块最小特征值。

    • 'LA' : 最大(代数)特征值。

    • 'SA' : 最小(代数)特征值。

  • n_iter (int) – 允许的最大 Arnoldi 更新迭代次数。默认值 = 行数的 10 倍。

  • tol (float) – 特征值的相对精度(停止标准)。默认值 = 0(机器精度)。

变量:
  • eigenvectors (np.ndarray) – 二维数组,每列都是输入的特征向量。

  • eigenvalues (np.ndarray) – 与每个特征向量相关的特征值。

另请参阅

scipy.sparse.linalg.eigsh

fit(matrix: csr_matrix | LinearOperator, n_components: int = 2)[source]

对对称输入矩阵执行谱分解。

参数:
  • matrix (sparse.csr_matrix or linear operator) – 要分解的矩阵。

  • n_components (int) – 要计算的特征向量数量

返回值:

self

返回类型:

EigSolver

get_params()

获取参数作为字典。

返回值:

params – 算法参数。

返回类型:

dict

set_params(params: dict) Algorithm

设置算法的参数。

参数:

params (dict) – 算法参数。

返回值:

self

返回类型:

Algorithm

class sknetwork.linalg.LanczosSVD(n_iter: int | None = None, tol: float = 0.0)[source]

\(AA^T\)\(A^TA\) 上使用 Lanczos 方法的 SVD 求解器。

参数:
  • n_iter (int) – 允许的最大 Arnoldi 更新迭代次数。默认值 = 行数或列数的 10 倍。

  • tol (float) – 特征值的相对精度(停止标准)。默认值 = 0(机器精度)。

变量:
  • singular_vectors_left (np.ndarray) – 二维数组,每列都是输入的左奇异向量。

  • singular_vectors_right (np.ndarray) – 二维数组,每列都是输入的右奇异向量。

  • singular_values (np.ndarray) – 奇异值。

另请参阅

scipy.sparse.linalg.svds

fit(matrix: csr_matrix | LinearOperator, n_components: int, init_vector: ndarray | None = None)[source]

对输入矩阵执行奇异值分解。

参数:
  • matrix – 要分解的矩阵。

  • n_components (int) – 要计算的奇异值数量

  • init_vector (np.ndarray) – 迭代的起始向量。默认值 = 随机值。

返回值:

self

返回类型:

SVDSolver

get_params()

获取参数作为字典。

返回值:

params – 算法参数。

返回类型:

dict

set_params(params: dict) Algorithm

设置算法的参数。

参数:

params (dict) – 算法参数。

返回值:

self

返回类型:

Algorithm