
=============================================
Computationally Efficient
=============================================

Whether you're working with in-memory or out-of-memory data, xeofs ensures computational efficiency. This is achieved using randomized SVD, which is typically faster for large matrices than a full SVD. For more details, refer to the sklearn documentation_ on PCA.

A comparative analysis demonstrates the performance of xeofs against eofs_ on a standard laptop using a 3D dataset with time, longitude, and latitude dimensions. Results indicate that xeofs computes moderate datasets (10,000 samples by 100,000 features) in under a minute. While eofs is faster for smaller datasets, xeofs excels with larger datasets, offering significant speed advantages. The dashed line marks datasets with about 3 MiB; xeofs outpaces eofs above this size, whereas eofs is preferable for smaller datasets.

Comparison of computational times between xeofs and eofs for data sets of varying sizes


.. image:: ../../../perf/timings_dark.png
    :height: 300px
    :width: 750px
    :alt: Comparison of computational times between xeofs and eofs for data sets of varying sizes
    :align: center
    :class: only-dark

.. image:: ../../../perf/timings_light.png
    :height: 300px
    :width: 750px
    :alt: Comparison of computational times between xeofs and eofs for data sets of varying sizes
    :align: center
    :class: only-light


.. note::

    You can find the script to run the performance tests here_.


.. _eofs: https://ajdawson.github.io/eofs/
.. _here: https://github.com/xarray-contrib/xeofs/tree/main/docs/perf
.. _documentation: https://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html
