Senior 3 min · March 24, 2026

Eigenvalues and Eigenvectors — Explained with Applications

Learn eigenvalues and eigenvectors — what they mean geometrically, how to compute them, and why they underpin PCA, Google PageRank, vibration analysis, and quantum mechanics.

N
Naren · Founder
Plain-English first. Then code. Then the interview question.
About
 ● Production Incident 🔎 Debug Guide
Quick Answer
  • Eigenvector of a matrix A: a nonzero vector v such that Av = λv (only scaled, not rotated)
  • Eigenvalue λ: the scalar factor by which the eigenvector is stretched or shrunk
  • Compute: solve det(A - λI) = 0 for λ, then (A - λI)v = 0 for v
  • Real symmetric matrices: always have real eigenvalues and orthogonal eigenvectors — use numpy.linalg.eigh
  • Power iteration: repeated Av / ‖Av‖ converges to dominant eigenvector — original PageRank algorithm
  • Production trap: near-zero eigenvalues cause division‑by‑zero in PCA whitening and numerical instability in any downstream inversion
Plain-English First

An eigenvector of a matrix is a direction that the matrix does not rotate — it only stretches or shrinks. The eigenvalue is how much it stretches. If you multiply a transformation matrix by its eigenvector, you get the same vector scaled by the eigenvalue. This 'invariant direction' concept appears everywhere: principal components in PCA, dominant webpage in PageRank, stable modes in structural engineering, and quantum states in physics.

Eigenvalues and eigenvectors are perhaps the most fundamental concept in applied linear algebra. Av = λv — a matrix A, when applied to its eigenvector v, produces the same vector scaled by eigenvalue λ. Finding the directions that a transformation preserves (up to scaling) reveals the essential structure of the transformation.

Google's original PageRank was the dominant eigenvector of the web's link matrix. PCA computes the eigenvectors of a covariance matrix to find principal components. Quantum states are eigenvectors of Hamiltonian operators. Structural resonant frequencies are eigenvalues of stiffness matrices. Understanding eigenvectors is understanding how to extract the 'essential directions' from a linear system.

Computing Eigenvalues and Eigenvectors

Eigenvalues: solve det(A - λI) = 0 (characteristic polynomial). Eigenvectors: for each λ, solve (A - λI)v = 0.

The characteristic polynomial of an n×n matrix is degree n. For large n, numerical methods (QR algorithm, power iteration) are used. Python's numpy.linalg.eig uses the LAPACK library, which applies the QR algorithm with shifts.

eigen.pyPYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np

A = np.array([[4,2],[1,3]], dtype=float)

# NumPy eigendecomposition
eigenvalues, eigenvectors = np.linalg.eig(A)
print('Eigenvalues:', eigenvalues)   # [5, 2]
print('Eigenvectors (columns):\n', eigenvectors)

# Verify: Av = λv
for i in range(len(eigenvalues)):
    v = eigenvectors[:, i]
    lam = eigenvalues[i]
    print(f'λ={lam:.1f}: Av={A@v}, λv={lam*v}')
    print(f'  Match: {np.allclose(A@v, lam*v)}')
Output
Eigenvalues: [5. 2.]
Eigenvectors (columns):
[[0.894 0.707]
[0.447 -0.707]]
λ=5.0: Av=[4.472 2.236], λv=[4.472 2.236]
Match: True
λ=2.0: Av=[1.414 -1.414], λv=[1.414 -1.414]
Match: True
Production Insight
For n > 1000, computing all eigenvalues is O(n³). Use sparse methods (scipy.sparse.linalg.eigs) when only a few eigenpairs are needed.
If the matrix is nearly defective (almost non-diagonalizable), the algorithm may produce inaccurate eigenvectors. Check residual ‖Av - λv‖.
Always use eigh for symmetric matrices — it's twice as fast and guarantees real eigenvalues.
Key Takeaway
Eigenvalues from det(A - λI) = 0, eigenvectors from nullspace of (A - λI).
Use numpy.linalg.eig for general matrices, eigh for symmetric.
Residual ‖Av - λv‖ should be near machine epsilon; if not, suspect numerical trouble.

Power Iteration — Finding the Dominant Eigenvector

Power iteration finds the largest eigenvalue by repeatedly multiplying by A and normalising. This is the algorithm behind original PageRank.

Algorithm: initialize random v, then loop v = A v / ‖A v‖. Convergence rate depends on the ratio |λ₂/λ₁| — closer to 1 means slower convergence. Rayleigh quotient λ = vᵀAv / vᵀv gives eigenvalue estimate.

power_iteration.pyPYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def power_iteration(A, n_iter=100, tol=1e-10):
    """Find dominant eigenvector (largest eigenvalue)."""
    import numpy as np
    n = len(A)
    v = np.random.rand(n)
    v /= np.linalg.norm(v)
    for _ in range(n_iter):
        v_new = A @ v
        eigenvalue = np.dot(v_new, v)  # Rayleigh quotient
        v_new /= np.linalg.norm(v_new)
        if np.linalg.norm(v_new - v) < tol:
            return eigenvalue, v_new
        v = v_new
    return eigenvalue, v

A = np.array([[4,2],[1,3]], dtype=float)
lam, v = power_iteration(A)
print(f'Dominant eigenvalue: {lam:.4f}')  # 5.0
print(f'Dominant eigenvector: {v}')
Output
Dominant eigenvalue: 5.0000
Dominant eigenvector: [0.894 0.447]
Production Insight
Power iteration is the core of PageRank — but PageRank's link matrix is not necessarily symmetric, so eigenvectors may not be orthogonal.
If the dominant eigenvalue is not well separated (|λ₁| ≈ |λ₂|), convergence slows dramatically. Use shifted power iteration or Arnoldi methods.
Rayleigh quotient iteration can converge to any eigenvector if initial guess is close — useful for structural engineering mode shapes.
Key Takeaway
Power iteration: Av → dominant eigenvector.
Convergence rate |λ₂/λ₁| — poor separation = slow.
Rayleigh quotient gives eigenvalue estimate for free.

Geometric Intuition: What Does Av = λv Mean?

An eigenvector points in a direction that is invariant under the transformation A — it only gets stretched (or shrunk, or reversed) by λ. This is the 'natural axis' of the matrix.

Example: A = [[2,0],[0,3]]. The eigenvectors are [1,0]ᵀ (λ=2) and [0,1]ᵀ (λ=3). Multiply any point: x-coordinate doubles, y-coordinate triples — the axes are scaled independently. If you pick any other direction, the point rotates AND scales.

For a symmetric matrix, eigenvectors are orthogonal — they form a perfect coordinate system. For a non‑symmetric matrix, eigenvectors are not orthogonal, and the transformation can shear.

geometric_demo.pyPYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
import matplotlib.pyplot as plt

# Diagonal matrix – eigenvectors are axes
A = np.array([[2,0],[0,3]])
v1 = np.array([1,0])
v2 = np.array([0,1])
print("Eigenvectors are standard axes:", A@v1, A@v2)  # [2,0] and [0,3]

# Shear matrix – eigenvectors not orthogonal
B = np.array([[1,1],[0,1]])
eigvals, eigvecs = np.linalg.eig(B)
print("Shear eigenvalues (both 1):", eigvals)
print("Only one eigenvector (not span):", eigvecs[:,0])
Production Insight
Eigenvector orthogonality matters in PCA: non‑orthogonal components mean variance is shared across components. Always check symmetry of the covariance matrix.
A defective matrix (like the shear example) does not have a complete set of eigenvectors — numerical algorithms may fail silently.
When eigenvectors are nearly parallel, the matrix is ill‑conditioned and any inversion is risky.
Key Takeaway
Eigenvector = direction unchanged by A.
Symmetric → orthogonal eigenvectors.
Defective matrices have incomplete eigenvector sets — use SVD instead.

Real‑World Applications: Where Eigenvalues Matter in Production

Eigenvalues and eigenvectors are not just theoretical. They power critical algorithms:

  • PCA (Principal Component Analysis): eigenvectors of the covariance matrix = principal components; eigenvalues = variance explained. Used for dimensionality reduction, noise filtering, and anomaly detection.
  • PageRank: the dominant eigenvector of the web's transition matrix gives page importance. Google solved this for billions of pages using iterative methods.
  • Structural Engineering: eigenvalues of the stiffness matrix = natural frequencies. If a bridge's frequency matches wind gust frequency, resonance can collapse it (Tacoma Narrows).
  • Quantum Mechanics: eigenstates of the Hamiltonian operator are the possible energy levels. The Schrödinger equation is an eigenvalue problem.
  • Graph Theory: eigenvalues of the adjacency matrix indicate community structure, connectivity, and node centrality (spectral clustering).
Eigenvalues as 'Fingerprints' of a Matrix
  • Eigenvalues are the roots of the characteristic polynomial — they capture the 'stretch factors' along invariant directions.
  • The spectral radius (largest |λ|) determines stability of dynamical systems: if > 1, the system diverges.
  • The condition number (max λ / min λ) tells you how close the matrix is to singular.
  • For symmetric matrices, eigenvalues are real and the eigenvectors form an orthonormal basis — the matrix can be 'diagonalized' perfectly.
Production Insight
In ML pipelines, eigenvalues are used for feature scaling: if eigenvalues drop sharply after a few components, you can save memory and computation by truncating.
Never hard‑code the number of PCA components — use eigenvalue ratio threshold (e.g., keep 95% variance).
For real‑time PageRank, use an incremental algorithm (e.g., PageRank on evolving graphs) to avoid recomputing the full eigenvector each time.
Key Takeaway
Eigenvalues appear everywhere: PCA (variance), PageRank (importance), structures (frequencies), quantum (energy).
Always validate that eigenvalues make physical sense before deploying.
Use the spectral gap (λ₁ - λ₂) to decide if a rank‑1 approximation is sufficient.

Numerical Stability and Production Gotchas

  • Near‑zero eigenvalues cause division by zero in whitening or matrix functions.
  • Round‑off asymmetry: a matrix that is theoretically symmetric may have tiny asymmetry due to floating‑point ops, leading to complex eigenvalues.
  • Defective matrices: not all matrices have a full set of eigenvectors — numpy.linalg.eig still returns a result, but the eigenvectors may be linearly dependent or wildly inaccurate.
  • Condition number: if the condition number (max|λ|/min|λ|) is huge (e.g., > 10¹²), small changes in A cause large changes in eigenvectors. The problem is ill‑posed.
Best practices
  • Always check residual ‖Av
  • λv‖.
  • Use numpy.linalg.eigh when symmetry is guaranteed.
  • For ill‑conditioned cases, switch to SVD (singular value decomposition), which is more stable for any matrix.
  • When computing matrix functions (sqrt, inverse, exp) via eigendecomposition, use scipy.linalg.sqrtm, inv, expm which handle stability internally.
numerical_safety.pyPYTHON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import numpy as np
from io.thecodeforge.linalg import safe_eigen # hypothetical robust wrapper

# Ill‑conditioned matrix (nearly singular)
A = np.array([[1, 1], [1, 1 + 1e-12]])
eigvals, eigvecs = np.linalg.eig(A)
print("Eigenvalues (should be ~2 and ~1e-12):", eigvals)
# Residual check
v = eigvecs[:,0]
lam = eigvals[0]
print("Residual norm:", np.linalg.norm(A@v - lam*v))
# Use safe decomposition instead
U, S, Vt = np.linalg.svd(A)
print("Singular values:", S)  # More stable
Production Insight
Use numpy.linalg.eigh for symmetric matrices — it's 2x faster and avoids spurious complex eigenvalues.
If you must invert via eigendecomposition, set a tolerance: keep only eigenvalues above max(|λ|) * 1e-12.
Consider using eigsh (scipy.sparse.linalg) for large sparse matrices — it's the default for PageRank and PCA on big datasets.
Key Takeaway
Always check matrix symmetry before eigendecomposition.
Avoid inverting matrices with near‑zero eigenvalues — use SVD or pinv.
Residual check ‖Av - λv‖ < 1e-10 is mandatory in production.
● Production incidentPOST-MORTEMseverity: high

Near‑Zero Eigenvalues Silently Break PCA Whitening in Production

Symptom
Model output suddenly contains NaN or Inf values. PCA whitened features explode. The pipeline runs without errors because the division by zero happens inside a NumPy vectorized operation.
Assumption
Engineers assumed the covariance matrix was always full rank and well‑conditioned. They used a hard‑coded epsilon for pseudo‑inverse, but the new dataset introduced a feature with extremely low variance.
Root cause
The covariance matrix after feature scaling had an eigenvalue ~ 1e‑16. The whitening step divided by the square root of eigenvalues, causing overflow. No guard against near‑zero or negative eigenvalues due to floating‑point rounding.
Fix
Replace direct eigendecomposition with SVD (singular value decomposition) for the whitening step. Add a tolerance: set eigenvalues below 1e‑10 to a small positive value (e.g., 1e‑6) before inversion. Use numpy.linalg.pinv with rcond parameter instead of manual inverse.
Key lesson
  • Never compute the inverse of a matrix based on eigendecomposition without checking the condition number.
  • Always handle near‑zero eigenvalues by clamping or using SVD.
  • Monitor the condition number of your covariance matrix in production. A condition number > 1e6 is a red flag.
  • Use numpy.linalg.pinv or scipy.linalg.pinv for robust generalized inverses.
Production debug guideCommon failures in eigenvalue-related algorithms and their immediate fixes4 entries
Symptom · 01
PCA model returns NaN after training on new data
Fix
Check condition number of covariance matrix. If > 1e6, reduce dimensionality or apply stronger regularization.
Symptom · 02
PageRank fails to converge within iteration limit
Fix
Verify the link matrix is stochastic (columns sum to 1). Check for dangling nodes (zero columns). Add teleportation factor.
Symptom · 03
Vibration analysis shows imaginary frequencies for a symmetric stiffness matrix
Fix
Re‑check matrix symmetry. Even tiny floating‑point asymmetry can produce small imaginary parts. Force symmetry: A = (A + A.T)/2 before eigendecomposition.
Symptom · 04
Eigenvector orthogonality check fails (dot product > 1e‑10)
Fix
For symmetric matrices, use numpy.linalg.eigh (guarantees orthogonal eigenvectors). For general matrices, expect loss of orthogonality; use SVD instead.
★ Eigenvalue/Eigenvector Debug Cheat SheetQuick commands and fixes for common numerical issues with eigendecomposition in production.
Numpy returns complex eigenvalues for a real symmetric matrix
Immediate action
Verify matrix symmetry: np.allclose(A, A.T). If not symmetric, use eigh which forces symmetric assumption.
Commands
np.linalg.eigh(A) # assumes symmetric, returns real eigenvalues
np.max(np.abs(A - A.T)) # check asymmetry magnitude
Fix now
If asymmetry < 1e-12, force symmetry: A_sym = (A + A.T) / 2
Eigenvalues include tiny negative values (e.g., -1e-15) for a positive semi-definite matrix+
Immediate action
Do not use these eigenvalues directly in inversion or whitening. Clamp to zero.
Commands
eigvals = np.clip(eigvals, 0, None) # set negative to zero
condition_number = np.max(eigvals) / np.min(eigvals[eigvals > 1e-12])
Fix now
Use numpy.linalg.pinv with rcond=1e-10 instead of manual inverse based on eigenvalues.
Eigendecomposition vs SVD — When to Use Which
PropertyEigendecomposition (A = QΛQ⁻¹)SVD (A = UΣVᵀ)
Applicable matricesSquare onlyAny matrix (rectangular too)
Requires diagonalizabilityYes – A must have n linearly independent eigenvectorsAlways exists
Numerical stabilityLower – sensitive to near‑zero eigenvaluesHigher – more robust for ill‑conditioned matrices
Orthogonal factorsOnly if A is symmetric (Q orthogonal)Always U and V are orthogonal
PerformanceFaster for symmetric (eigh)Slightly slower but more general
Inverse / pseudo‑inverseA⁻¹ = QΛ⁻¹Q⁻¹ (fragile)A⁺ = VΣ⁺Uᵀ (stable via threshold)
Common use casePCA, PageRank, vibration modes (square matrices)Recommendation systems, data compression, any linear least squares

Key takeaways

1
Av = λv
eigenvector v is unchanged in direction by A, scaled by eigenvalue λ.
2
Eigenvalues from characteristic polynomial det(A-λI)=0. Eigenvectors from null space of (A-λI).
3
PCA
eigenvectors of covariance matrix = principal components. Eigenvalues = variance explained.
4
Power iteration
repeated A×v/‖Av‖ converges to dominant eigenvector — PageRank's original algorithm.
5
Symmetric matrices always have real eigenvalues and orthogonal eigenvectors
numpy.linalg.eigh for symmetric.
6
Never use eigendecomposition for inversion without checking condition number
use SVD or pinv instead.

Common mistakes to avoid

4 patterns
×

Using eigendecomposition instead of SVD for rectangular matrices

Symptom
You attempt to compute eigenvalues of a non‑square matrix (e.g., feature matrix in ML). numpy.linalg.eig raises LinAlgError: Last 2 dimensions of the array must be square.
Fix
Use numpy.linalg.svd for rectangular matrices. If you need eigenvalues, consider the square Gram matrix AᵀA, but be aware that squaring worsens condition number.
×

Assuming all matrices have a full set of eigenvectors (diagonalizable)

Symptom
You compute eigenvalues of a defective matrix (e.g., a shear). The eigenvectors returned by numpy.linalg.eig may be linearly dependent or inaccurate. Inversion or matrix power using decomposition produces nonsense.
Fix
Check the condition number of the eigenvector matrix: if cond(Q) > 1e6, the matrix is nearly defective. Switch to SVD or Jordan canonical form (rarely needed).
×

Forgetting to handle negative eigenvalues in covariance matrix due to numeric noise

Symptom
PCA whitening produces NaN because eigenvalue is slightly negative (e.g., -1e-15) and you take sqrt.
Fix
Clamp eigenvalues to a small positive value (e.g., 1e-10) before taking square root. Use numpy.clip(eigvals, 0, None). Better yet, use SVD for whitening.
×

Using numpy.linalg.eig on a symmetric matrix with tiny asymmetry

Symptom
Eigenvalues come out complex (small imaginary parts) even though matrix should be real‑symmetric.
Fix
Force symmetry: A = (A + A.T) / 2 before calling eigh. Use eigh instead of eig for any matrix that is theoretically symmetric.
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
What is an eigenvector geometrically?
Q02SENIOR
How is PageRank related to eigenvectors?
Q03SENIOR
Why do symmetric matrices have real eigenvalues?
Q04SENIOR
How does PCA use eigenvectors?
Q05SENIOR
What's the difference between eigendecomposition and SVD?
Q01 of 05JUNIOR

What is an eigenvector geometrically?

ANSWER
An eigenvector of a matrix A is a non‑zero vector v that, when multiplied by A, only changes by a scalar factor λ (Av = λv). Geometrically, it's a direction that the transformation does _not_ rotate — it only stretches, shrinks, or reverses. For symmetric matrices, eigenvectors are orthogonal and align with the principal axes of the transformation.
FAQ · 4 QUESTIONS

Frequently Asked Questions

01
What is eigendecomposition vs SVD?
02
Can a matrix have zero as an eigenvalue?
03
How are eigenvalues of a large matrix computed in practice?
04
What does it mean if eigenvalue λ = 1?
🔥

That's Linear Algebra. Mark it forged?

3 min read · try the examples if you haven't

Previous
LU Decomposition
4 / 5 · Linear Algebra
Next
Singular Value Decomposition — SVD