def test_pca(app_inst: ArrayApplication): real_X, _ = BimodalGaussian.get_dataset(2345, 9) X = app_inst.array(real_X, block_shape=(123, 4)) # Covariance matrix test. C = app_inst.cov(X, rowvar=False) V, _, VT = linalg.svd(app_inst, C) assert app_inst.allclose(V, VT.T) pc = X @ V assert app_inst.allclose(pc, linalg.pca(app_inst, X))
def pca(app: ArrayApplication, X: BlockArray): C = app.cov(X, rowvar=False) U, _, _ = svd(app, C) return X @ U