Given a data matrix $X$ of say 1000000 observations $\times$ 100 features,
is there a fast way to build a tridiagonal approximation
$A \approx cov(X)$ ?
Then one could factor $A = L L^T$,
$L$ all 0 except $L_{i\ i-1}$ and $L_{i i}$,
and do fast decorrelation (whitening) by solving
$L x = x_{white}$.
(By "fast" I mean $O( size\ X )$.)
(Added, trying to clarify): I'm looking for a quick and dirty whitener which is faster than full $cov(X)$ but better than diagonal. Say that $X$ is $N$ data points $\times Nf$ features, e.g. 1000000$\times$ 100, with features 0-mean.
1) build $Fullcov = X^T X$, Cholesky factor it as $L L^T$, solve $L x = x_{white}$ to whiten new $x$ s. This is quadratic in the number of features.
2) diagonal: $x_{white} = x / \sigma(x)$ ignores cross-correlations completely.
One could get a tridiagonal matrix from $Fullcov$ just by zeroing all entries outside the tridiagonal, or not accumulating them in the first place. And here I start sinking: there must be a better approximation, perhaps hierarchical, block diagonal → tridiagonal ?
(Added 11 May): Let me split the question in two:
1) is there a fast approximate $cov(X)$ ?
No (whuber), one must look at all ${N \choose 2}$ pairs
(or have structure, or sample).
2) given a $cov(X)$, how fast can one whiten new $x$ s ?
Well, factoring $cov = L L^T$, $L$ lower triangular, once,
then solving $L x = x_{white}$
is pretty fast; scipy.linalg.solve_triangular, for example, uses Lapack.
I was looking for a yet faster whiten(), still looking.