Skip to main content

transform an ill-conditioned quadratic matrix to a positive semidefinite matrix

Project description

PyPI version


Transform an ill-conditioned quadratic matrix into a positive semi-definite matrix.


The scipy-psdm git repo is available as PyPi package

pip install scipy-psdm


Lurie-Goldberg Algorithm to transform an ill-conditioned quadratic matrix into a positive semi-definite matrix.

import scipy_psdm as psdm
import numpy as np

# A matrix with subjectively set correlations
mat = [[ 1.   , -0.948,  0.099, -0.129],
       [-0.948,  1.   , -0.591,  0.239],
       [ 0.099, -0.591,  1.   ,  0.058],
       [-0.129,  0.239,  0.058,  1.   ]]
mat = np.array(mat)

# Convert to a positive semi-definite matrix
rho = psdm.approximate_correlation_matrix(mat)

Generate correlated random numbers

import scipy_psdm as psdm
X, rho = psdm.randcorr(n_obs=100, n_vars=5, random_state=42)

# compare
import numpy as np
print(np.corrcoef(X, rowvar=False).round(3))

Check the examples folder for notebooks.


Install a virtual environment

python3.6 -m venv .venv
source .venv/bin/activate
pip3 install -r requirements.txt
pip3 install -r requirements-dev.txt
pip3 install -r requirements-demo.txt

(If your git repo is stored in a folder with whitespaces, then don’t use the subfolder .venv. Use an absolute path without whitespaces.)

Python commands

  • Start virtual env: source .venv/bin/activate
  • Jupyter for the examples: jupyter lab
  • Check syntax: flake8 --ignore=F401 --exclude=$(grep -v '^#' .gitignore | xargs | sed -e 's/ /,/g')
  • Run Unit Tests: pytest -v
  • Upload to PyPi with twine: python sdist && twine upload -r pypi dist/*

Clean up

find . -type f -name "*.pyc" | xargs rm
find . -type d -name "__pycache__" | xargs rm -r
rm -r .pytest_cache
rm -r .venv


Please open an issue for support.


Please contribute using Github Flow. Create a branch, add commits, and open a pull request.


Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for scipy-psdm, version 0.2.1
Filename, size File type Python version Upload date Hashes
Filename, size scipy-psdm-0.2.1.tar.gz (4.9 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page