This is a library to run the Preconditioned ICA for Real Data (PICARD) algorithm [1] and its orthogonal version (PICARD-O) [2]. These algorithms show fast convergence even on real data for which sources independence do not perfectly hold.


We recommend the Anaconda Python distribution.


Picard can be installed with conda-forge. You need to add conda-forge to your conda channels, and then do:

$ conda install python-picard


Otherwise, to install picard, you first need to install its dependencies:

$ pip install numpy matplotlib numexpr scipy

Then install Picard with pip:

$ pip install python-picard

If you do not have admin privileges on the computer, use the --user flag with pip. To upgrade, use the --upgrade flag provided by pip.


To check if everything worked fine, you can do:

$ python -c 'import picard'

and it should not give any error message.


The easiest way to get started is to copy the following lines of code in your script:

>>> import numpy as np
>>> from picard import picard
>>> N, T = 3, 1000
>>> S = np.random.laplace(size=(N, T))
>>> A = np.random.randn(N, N)
>>> X = np.dot(A, S)
>>> K, W, Y = picard(X)  

Picard outputs the whitening matrix, K, the estimated unmixing matrix, W, and the estimated sources Y. It means that:

\[Y = W K X\]

NEW in 0.6: scikit-learn compatible API

Introducing picard.Picard, which mimics sklearn.decomposition.FastICA behavior:

>>> from sklearn.datasets import load_digits
>>> from picard import Picard
>>> X, _ = load_digits(return_X_y=True)
>>> transformer = Picard(n_components=7)
>>> X_transformed = transformer.fit_transform(X)
>>> X_transformed.shape


These are the dependencies to use Picard:

  • numpy (>=1.8)

  • matplotlib (>=1.3)

  • numexpr (>= 2.0)

  • scipy (>=0.19)

  • scikit-learn (>=0.23)

These are the dependencies to run the EEG example:

  • mne (>=0.14)


If you use this code in your project, please cite:

Pierre Ablin, Jean-Francois Cardoso, Alexandre Gramfort
Faster independent component analysis by preconditioning with Hessian approximations
IEEE Transactions on Signal Processing, 2018

Pierre Ablin, Jean-François Cardoso, Alexandre Gramfort
Faster ICA under orthogonal constraint
ICASSP, 2018

Bug reports

Use the github issue tracker to report bugs.


Fork me on GitHub