rpca-kit
Descomposición robusta de matrices en componentes de bajo rango y dispersa, con NumPy para CPU y PyTorch opcional para CPU o GPU CUDA. Python 3.10 o posterior.
D = L + S + E
L representa la estructura de bajo rango; S, las entradas o columnas atípicas;
E, el residuo. La biblioteca entrega diagnósticos de convergencia junto con las
matrices. La versión inicial es experimental y utiliza SVD exacta.
Instalación
Desde una distribución publicada en PyPI:
python -m pip install rpca-kit
Desde este código fuente, antes de publicar:
python -m pip install .
Para usar PyTorch:
python -m pip install 'rpca-kit[gpu]'
# Desde el código fuente: python -m pip install '.[gpu]'
El extra instala PyTorch, pero la disponibilidad de CUDA depende del hardware, el controlador y la distribución de PyTorch instalada. Selecciona la distribución adecuada en la guía oficial de PyTorch. La instalación básica requiere solamente NumPy.
Uso en CPU
import numpy as np
from rpca_kit import pcp
rng = np.random.default_rng(7)
left = rng.standard_normal((80, 3))
right = rng.standard_normal((3, 60))
low_rank = left @ right
sparse = np.zeros_like(low_rank)
indices = rng.choice(sparse.size, size=100, replace=False)
sparse.flat[indices] = rng.choice([-20.0, 20.0], size=indices.size)
data = low_rank + sparse
result = pcp(data, tol=1e-7, max_iter=1000)
print(result.converged, result.n_iter, result.error)
L, S = result
assert np.allclose(data, L + S + result.residual)
result.error depende del criterio de parada del método; consulta
los métodos y criterios. Reconstruir la entrada no demuestra
por sí solo que se hayan recuperado las componentes reales. Las pruebas sintéticas
también comparan las componentes estimadas con la verdad conocida.
Uso en GPU
import torch
from rpca_kit import pcp
data = torch.randn(100, 80, dtype=torch.float64, device="cuda")
result = pcp(data, backend="torch", device="cuda")
print(result.low_rank.device) # cuda:0
cpu_result = result.to_numpy() # copia explícita de resultados a CPU
Un tensor de PyTorch se conserva en su dispositivo con backend="auto".
Para transferir una matriz NumPy a GPU, usa device="cuda". Solicitar CUDA sin
una GPU disponible produce un error; no se cambia silenciosamente a CPU.
Las operaciones de los algoritmos se ejecutan sin construir grafos de autograd.
Los escalares de diagnóstico se transfieren al host en cada iteración.
Variantes
| Función | Modelo | Cuándo usarla |
|---|---|---|
pcp |
PCP por IALM | Corrupciones dispersas en entradas, sin ruido denso explícito. |
admm |
PCP por ADMM con penalización fija | El mismo modelo convexo, con control de la penalización. |
stable_pcp |
PCP penalizado por FISTA | Residuo denso, con regularización ajustable. |
outlier_pursuit |
Bajo rango más columnas atípicas | Corrupción concentrada por columnas. |
godec |
Proyecciones alternadas de rango y cardinalidad | Rango y número de entradas dispersas conocidos o seleccionados externamente. |
from rpca_kit import RPCA, decompose, stable_pcp, godec
stable = stable_pcp(data, tau=0.5, lambda_=0.1)
fixed_rank = godec(data, rank=3, cardinality=100)
model = RPCA(method="ialm", tol=1e-7).fit(data)
same_api = decompose(data, method="admm")
lambda_=None selecciona 1 / sqrt(max(m, n)); es una referencia inicial,
especialmente para PCP, y no un ajuste universal para todas las variantes.
IALM incrementa la penalización cuando domina el error primal; ADMM la mantiene fija.
GoDec requiere rank y cardinality explícitos. Los parámetros y diferencias
entre modelos se explican en docs/algorithms.md.
Resultados y límites
low_rank,sparseyresidualconservan el backend de cálculo.converged,n_iter,error,objectiveehistorypermiten revisar la parada.rankcalcula el rango numérico de la componente de bajo rango..to_numpy()devuelve un resultado independiente en CPU.- Las entradas deben ser matrices densas, reales, finitas y no vacías. Se
preservan
float32yfloat64; los enteros se convierten afloat64.
Con float32, usa inicialmente tol=1e-5; la tolerancia por defecto 1e-7
puede quedar por debajo de la precisión alcanzable y producir una advertencia
de falta de convergencia. La biblioteca conserva la tolerancia que solicites.
PCP necesita supuestos de identificabilidad: una matriz de bajo rango también dispersa puede admitir varias descomposiciones. GoDec es no convexo y puede llegar a un mínimo local. Una bandera de convergencia no constituye una garantía de recuperación estadística.
La SVD completa cuesta aproximadamente O(m*n*min(m,n)) por iteración y requiere
memoria proporcional al tamaño de la matriz. Esta versión no implementa flujo de
datos, matrices dispersas, SVD aleatoria, datos faltantes ni estimación automática
del rango. En matrices pequeñas, la sincronización y transferencia pueden hacer
que GPU sea más lenta que CPU.
Desarrollo y distribución
python -m pip install -e '.[dev]'
python -m pytest
python -m ruff check src tests examples scripts
python scripts/release.py
La última orden valida pruebas, construye una rueda y una distribución fuente y revisa los metadatos sin subir archivos. Las pruebas CUDA requieren hardware real; omitirlas por falta de hardware no valida la ejecución en GPU.
Consulta docs/publishing.md para publicar en PyPI y examples/synthetic.py para ejecutar un ejemplo reproducible.
Referencias
- Candès, Li, Ma y Wright. Robust Principal Component Analysis? JACM, 2011. DOI: 10.1145/1970392.1970395.
- Lin, Chen y Ma. The Augmented Lagrange Multiplier Method for Exact Recovery of Corrupted Low-Rank Matrices, 2010. arXiv:1009.5055.
- Zhou, Li, Wright, Candès y Ma. Stable Principal Component Pursuit, 2010. arXiv:1001.2363. La implementación usa la formulación penalizada descrita en la documentación, no la restricción explícita de una cota de ruido de ese artículo.
- Xu, Caramanis y Sanghavi. Robust PCA via Outlier Pursuit, 2010. arXiv:1010.4237.
- Zhou y Tao. GoDec: Randomized Low-rank & Sparse Matrix Decomposition in Noisy Case, ICML, 2011. Se implementa el núcleo determinista de proyecciones alternadas con SVD exacta, sin la aceleración aleatoria del artículo.
Licencia MIT. Véase LICENSE.
Metadata
Release files for rpca-kit 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| rpca_kit-0.1.0.tar.gz | 26.4 kB | With provenance | Details for rpca_kit-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| rpca_kit-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for rpca_kit-0.1.0-py3-none-any.whl |
Total release size: 40.5 kB
Release files / rpca_kit-0.1.0.tar.gz
| Download URL | rpca_kit-0.1.0.tar.gz |
|---|---|
| Size | 26.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64115d38d8ca193a5ec44f260d2a5130b56c9d4345696c5a46bd3d1be47b6eb2
|
|
BLAKE2b-256 checksum How to use checksums |
7c628379e51fd8a5e86439fb84b74a3319db1691be86501cf05b01e6a616c076
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logRelease files / rpca_kit-0.1.0-py3-none-any.whl
| Download URL | rpca_kit-0.1.0-py3-none-any.whl |
|---|---|
| Size | 14.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
be943e9a3e8cb6bce46a5c06142df1aaaff9787bd7fca485e3ea9af0cf9ebad9
|
|
BLAKE2b-256 checksum How to use checksums |
d75033c94e1ccb35e02a8c2422e07d040040f611f12056307cadb81f6ece2617
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logSecurity for rpca-kit 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for rpca_kit-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.