正在打开
READ. MARK. UNDERSTAND.

leading_subspace.py

在代码旁边,留下你的思考。

Python
import numpy as np
def leading_subspace(B, d=2):
"""提取矩阵的前 d 个主方向。"""
B = np.asarray(B, dtype=np.float64)
basis = np.zeros((B.shape[0], d))
# 1. 对零矩阵,直接返回零基底
if B.size == 0 or not np.any(B):
return basis
# 2. 奇异值分解,找到最重要的方向
U, s, _ = np.linalg.svd(
B, full_matrices=False
)
# 3. 过滤数值误差产生的微小奇异值
tolerance = (
max(B.shape)
* np.finfo(np.float64).eps
* s[0]
)
rank = min(np.sum(s > tolerance), d)
# 4. 保留有效方向,其余列补零
basis[:, :rank] = U[:, :rank]
return basis
选中代码,即可高亮或批注28 lines · UTF-8
只有你能查看这个代码本 H 高亮 · N 批注 · Esc 选择A LITTLE MORE UNDERSTOOD.