線性代數

線性代數工具。

標準化

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

標準化矩陣列,使其全部的範數為 1(或 0;空列維持為空列)。

參數:
  • matrix – 輸入矩陣。

  • p – 範數階數。

傳回:

標準化後矩陣(格式與輸入矩陣相同)。

傳回類型:

標準化矩陣

sknetwork.linalg.diagonal_pseudo_inverse(weights: ndarray) csr_matrix[原始碼]

計算 \(\text{diag}(w)^+\),即對角元素取對角矩陣的偽逆矩陣,根據權重表示 \(w\)

參數:

weights – 要反轉的權重。

傳回類型:

sparse.csr_matrix

稀疏 + 低階

類別 sknetwork.linalg.SparseLR(*args, **kwargs)[原始碼]

針對「稀疏 + 低階」結構的矩陣之類別。範例

\(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)。

特性 H

Hermitian 伴隨。

傳回 self 的 Hermitian 伴隨,也就是 Hermitian 共軛或 Hermitian 轉置。對於一個複雜的矩陣,Hermitian 伴隨等於共軛轉置。

可以使用 self.H 來縮寫,而不是 self.adjoint()。

傳回:

A_H – self 的 Hermitian 伴隨。

傳回類型:

LinearOperator

特性 T

轉置這個線性算子。

傳回一個代表此線性算子轉置的 LinearOperator。可以縮寫為 self.T 而不是 self.transpose()。

adjoint()

Hermitian 伴隨。

傳回 self 的 Hermitian 伴隨,也就是 Hermitian 共軛或 Hermitian 轉置。對於一個複雜的矩陣,Hermitian 伴隨等於共軛轉置。

可以使用 self.H 來縮寫,而不是 self.adjoint()。

傳回:

A_H – self 的 Hermitian 伴隨。

傳回類型:

LinearOperator

astype(dtype: str | dtype)[source]

變更物件的資料型別。

dot(x)

矩陣矩陣或矩陣向量乘法。

參數:

x (array_like) – 1 维或 2 维陣列,表示向量或矩陣。

傳回:

Ax – 1 维或 2 维陣列(視 x 的形狀而定),表示套用這個線性算子到 x 的結果。

傳回類型:

陣列

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 是列向量或一維陣列,或二維陣列。預設實作遞延到共軛。

參數:

X ({matrix, ndarray}) – 一個矩陣或二維陣列。

傳回:

Y – 一個矩陣或二維陣列,取決於輸入的類型。

傳回類型:

{matrix, ndarray}

註解

此 rmatmat 包裝了用戶指定的 rmatmat 常式。

rmatvec(x)

共軛矩陣-向量乘法。

執行運算 y = A^H * x,其中 A 是 MxN 線性算子且 x 是列向量或一維陣列。

參數:

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()。

求解器

類別 sknetwork.linalg.LanczosEig(which='LM', n_iter: int | None = None, tol: float = 0.0)[原始碼]

使用 Lanczos 方法的 Eigenvalue 求解器。

參數:
  • which (字串) –

    要尋找的 Eigenvector 和 Eigenvalue

    • 'LM' : 最大(模數)Eigenvalue。

    • 'SM' : 最小(模數)Eigenvalue。

    • 'LA' : 最大(代數)Eigenvalue。

    • 'SA' : 最小(代數)Eigenvalue。

  • n_iter (int) – 允許的 Arnoldi 更新反覆運算的最大次數。預設 = 10 * 列數。

  • tol (float) – Eigenvalue 的相對準確度(停止標準)。預設 = 0(機器精度)。

變數:
  • eigenvectors (np.ndarray) – 二維陣列,每一欄是輸入的 Eigenvector。

  • eigenvalues (np.ndarray) – 與每個 Eigenvector 關聯的 Eigenvalue。

請參閱

scipy.sparse.linalg.eigsh

fit(matrix: csr_matrix | LinearOperator, n_components: int = 2)[原始碼]

對稱輸入矩陣執行頻譜分解。

參數:
  • matrix (sparse.csr_matrix線性算子) – 要分解的矩陣。

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

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

參數:
  • n_iter (int) - 允許的最大 Arnoldi 更新疊代次數。預設為 10 乘以列或行的數量。

  • tol (float) – Eigenvalue 的相對準確度(停止標準)。預設 = 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