界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

randomized_nystrom_factorization

randomized_nystrom_factorization

【效率与协作】Compute a stable randomized Nyström PSD low-rank eigendecomposition from a dense PSD matrix or matrix-vector product interface.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: randomized_nystrom_factorization description: Compute a stable randomized Nyström PSD low-rank eigendecomposition from a dense PSD matrix or matrix-vector product interface.

Randomized Nyström Factorization

Use this skill when you need the paper's Algorithm 2.1 component: a reproducible low-rank PSD approximation A_nys = U diag(lambda_hat) U.T for a symmetric positive-semidefinite matrix. Do not use it as a full linear solver; downstream solver skills own preconditioning and PCG.

Inputs

  • PSD matrix A as a dense JSON/NumPy array, or a Python callable that applies A to a matrix.
  • Dimension n and sketch rank ell, with 1 <= ell <= n.
  • Random seed for reproducibility.

Outputs

  • U: orthonormal basis for the Nyström range.
  • lambda_hat: nonnegative approximate eigenvalues.
  • Diagnostics: sketch rank, returned rank, stability shift, matvec count, and Cholesky retry count.

Workflow

  1. Validate matrix dimensions and rank.
  2. Draw a standard Gaussian sketch and orthonormalize it with thin QR.
  3. Form Y = A @ Omega; this is the only matrix interaction required by the algorithm.
  4. Add a tiny stability shift nu * Omega before Cholesky.
  5. Factor Omega.T @ Y_shift, solve by the Cholesky factor, and take a thin SVD.
  6. Return U and squared singular values minus the stability shift, clipped at zero for roundoff.

Validation

Run:

python scripts/nystrom.py --self-test
python tests/test_nystrom.py

The tests verify shapes, orthonormality, nonnegative eigenvalues, deterministic seeding, and improved approximation with larger rank.

Limitations

The routine assumes PSD-compatible input. It is intentionally small and dense-friendly for recovery experiments; large production runs should provide an efficient matvec closure and avoid forming dense matrices.

我的收藏