How to generate a symmetric positive-definite matrix using Python Scikit-Learn?

A symmetric positive-definite matrix is a square matrix where all eigenvalues are positive. Python Scikit-learn provides the make_spd_matrix() function to generate random symmetric positive-definite matrices, useful for testing algorithms and simulations.

Basic Symmetric Positive-Definite Matrix

The make_spd_matrix() function creates a symmetric positive-definite matrix of specified dimensions ?

from sklearn.datasets import make_spd_matrix
import pandas as pd

# Generate a 4x4 symmetric positive-definite matrix
spd_matrix = make_spd_matrix(n_dim=4, random_state=1)
print("Generated SPD Matrix:")
print(pd.DataFrame(spd_matrix))
Generated SPD Matrix:
          0         1         2         3
0  1.214261 -1.693503  0.092278 -0.167397
1 -1.693503  3.331807 -0.230052  0.424357
2  0.092278 -0.230052  0.381256  0.119570
3 -0.167397  0.424357  0.119570  0.387159

Visualizing the Matrix with Heatmap

We can visualize the matrix structure using a color-coded heatmap ?

from sklearn.datasets import make_spd_matrix
import matplotlib.pyplot as plt
import seaborn as sns

# Generate matrix and create heatmap
spd_matrix = make_spd_matrix(n_dim=4, random_state=1)

plt.figure(figsize=(6, 4))
sns.heatmap(spd_matrix, annot=True, cmap='rocket', fmt='.3f')
plt.title('Symmetric Positive-Definite Matrix')
plt.show()

Sparse Symmetric Positive-Definite Matrix

For larger dimensions, you can generate a sparse version using make_sparse_spd_matrix() ?

from sklearn.datasets import make_sparse_spd_matrix
import numpy as np

# Generate a sparse 6x6 SPD matrix
sparse_spd = make_sparse_spd_matrix(dim=6, random_state=42)

print("Sparse SPD Matrix shape:", sparse_spd.shape)
print("Non-zero elements:", np.count_nonzero(sparse_spd))
print("\nMatrix values:")
print(sparse_spd.round(3))
Sparse SPD Matrix shape: (6, 6)
Non-zero elements: 36
Matrix values:
[[ 1.446  0.19   0.313  0.     0.     0.   ]
 [ 0.19   1.095 -0.128  0.     0.     0.   ]
 [ 0.313 -0.128  1.097  0.     0.     0.   ]
 [ 0.     0.     0.     1.     0.     0.   ]
 [ 0.     0.     0.     0.     1.     0.   ]
 [ 0.     0.     0.     0.     0.     1.   ]]

Parameters

Parameter Description Default
n_dim / dim Matrix dimension 1
random_state Seed for reproducibility None
alpha (sparse only) Sparsity level (0-1) 0.95

Key Properties

Let's verify the positive-definite property by checking eigenvalues ?

from sklearn.datasets import make_spd_matrix
import numpy as np

# Generate matrix and check eigenvalues
matrix = make_spd_matrix(n_dim=3, random_state=10)
eigenvalues = np.linalg.eigvals(matrix)

print("Eigenvalues:", eigenvalues.round(4))
print("All positive?", np.all(eigenvalues > 0))
print("Is symmetric?", np.allclose(matrix, matrix.T))
Eigenvalues: [0.4284 1.2157 2.8559]
All positive? True
Is symmetric? True

Conclusion

Use make_spd_matrix() to generate symmetric positive-definite matrices for testing linear algebra algorithms. The sparse version make_sparse_spd_matrix() is useful for high-dimensional problems with memory constraints.

Updated on: 2026-03-26T22:12:19+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements