I see...

I assume this 3 lines in PCAModel:

    data = np.zeros((n_samples, n_features))
        for i, sample in enumerate(samples):
            data[i] = sample.as_vector()

Do copy the data from each `sample` to each row of `data`, right? Otherwise it would have complained when trying to execute the old:

    X -= mean_vector

Is this correct?

If so, does this mean that now when computing PCA through `PCAModel` we'll be holding 3 different (potentially) big chunks of memory for the pretty much the same data? I.e. `samples`, `data` and `X` after

    X = X - mean_vector

???