Need help with pyRiemann?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

284 Stars 95 Forks Other 352 Commits 23 Opened issues


Python package for covariance matrices manipulation and Biosignal classification with application in Brain Computer interface

Services available


Need anything else?

Contributors list


PyPI version Build Status codecov DOI Documentation Status Downloads

pyriemann is a python package for covariance matrices manipulation and classification through riemannian geometry.

The primary target is classification of multivariate biosignals, like EEG, MEG or EMG.

This is work in progress ... stay tuned.

This code is BSD-licenced (3 clause).


The documentation is available on


Using PyPI

pip install pyriemann

or using pip+git for the latest version of the code :

pip install git+

Anaconda is not currently supported, if you want to use anaconda, you need to create a virtual environment in anaconda, activate it and use the above command to install it.

From sources

For the latest version, you can install the package from the sources using the script

python install

or in developer mode to be able to modify the sources.

python develop

How to use it

Most of the functions mimic the scikit-learn API, and therefore can be directly used with sklearn. For example, for cross-validation classification of EEG signal using the MDM algorithm described in [4] , it is easy as :

import pyriemann
from sklearn.model_selection import cross_val_score

load your data

X = ... # your EEG data, in format Ntrials x Nchannels X Nsamples y = ... # the labels

estimate covariances matrices

cov = pyriemann.estimation.Covariances().fit_transform(X)

cross validation

mdm = pyriemann.classification.MDM()

accuracy = cross_val_score(mdm, cov, y)


You can also pipeline methods using sklearn Pipeline framework. For example, to classify EEG signal using a SVM classifier in the tangent space, described in [5] :

from pyriemann.estimation import Covariances
from pyriemann.tangentspace import TangentSpace

from sklearn.pipeline import make_pipeline from sklearn.svm import SVC from sklearn.model_selection import cross_val_score

load your data

X = ... # your EEG data, in format Ntrials x Nchannels X Nsamples y = ... # the labels

build your pipeline

covest = Covariances() ts = TangentSpace() svc = SVC(kernel='linear')

clf = make_pipeline(covest,ts,svc)

cross validation

accuracy = cross_val_score(clf, X, y)


Check out the example folder for more examples !


If you make a modification, run the test suite before submitting a pull request


Contribution Guidelines

The package aims at adopting the Scikit-Learn and MNE-Python conventions as much as possible. See their contribution guidelines before contributing to the repository.


[1] A. Barachant, M. Congedo ,"A Plug&Play P300 BCI Using Information Geometry", arXiv:1409.0107. link

[2] M. Congedo, A. Barachant, A. Andreev ,"A New generation of Brain-Computer Interface Based on Riemannian Geometry", arXiv: 1310.8115. link

[3] A. Barachant and S. Bonnet, "Channel selection procedure using riemannian distance for BCI applications," in 2011 5th International IEEE/EMBS Conference on Neural Engineering (NER), 2011, 348-351. pdf

[4] A. Barachant, S. Bonnet, M. Congedo and C. Jutten, “Multiclass Brain-Computer Interface Classification by Riemannian Geometry,” in IEEE Transactions on Biomedical Engineering, vol. 59, no. 4, p. 920-928, 2012. pdf

[5] A. Barachant, S. Bonnet, M. Congedo and C. Jutten, “Classification of covariance matrices using a Riemannian-based kernel for BCI applications“, in NeuroComputing, vol. 112, p. 172-178, 2013. pdf



  • Add example on SSVEP classification
  • Fix compatibility with scikit-learn v0.24
  • Correct probas of MDM


  • Updated for scikit-learn v0.22
  • Remove support for python 2.7
  • Update the examples to take into account last version of MNE
  • Fix cospectrum and coherency estimation.


  • Added
  • Added a permutation test for generic scikit-learn estimator
  • Stats module refactoring, with distance based t-test and f-test
  • Removed two way permutation test
  • Added
  • Support for python 3.5 and 3.6
  • Added
  • Added
  • Added


  • Improved documentation
  • Added TSclassifier for out-of the box tangent space classification.
  • Added Wasserstein distance and mean.
  • Added NearestNeighbor classifier.
  • Added Softmax probabilities for MDM.
  • Added CSP for covariance matrices.
  • Added Approximate Joint diagonalization algorithms (JADE, PHAM, UWEDGE).
  • Added ALE mean.
  • Added Multiclass CSP.
  • API: param name changes in
    to comply to Scikit-Learn.
  • API: attributes name changes in most modules to comply to the Scikit-Learn naming convention.
  • Added
  • Added
    spatial filtering
  • Added Harmonic mean
  • Added Kullback leibler mean


  • Added multiprocessing for MDM with joblib
  • Added kullback-leibler divergence
  • Added Riemannian Potato
  • Added sample_weight for mean estimation and MDM

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.