线性代数
线性代数工具。
归一化
稀疏 + 低秩
- 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
- dot(x)
矩阵 - 矩阵或矩阵 - 向量乘法。
- 参数:
x (array_like) – 1 维或 2 维数组,表示向量或矩阵。
- 返回值:
Ax – 1 维或 2 维数组(取决于 x 的形状),表示将此线性运算符应用于 x 的结果。
- 返回类型:
array
- 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 具有正确的形状和类型。
- 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 具有正确的形状和类型。
- 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