Foundations of Scientific Computing

Python, NumPy, Matplotlib, SciPy, and SymPy

Alan Lujan

Johns Hopkins University

Python for Scientific Computing

The Scientific Python Ecosystem

Library Purpose
NumPy Array data structures and operations
SciPy Numerical methods (optimization, integration)
Matplotlib Data visualization
SymPy Symbolic mathematics
Pandas Data manipulation and analysis

“We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.” — Donald Knuth

Why Pure Python Is Slow

Python determines types at runtime (dynamic typing):

The Solution: Vectorization

Delegate operations to optimized C code.

Non-vectorized:

Vectorized Version

Vectorized:

NumPy generates, squares, and sums all at once in optimized C code.

NumPy

Creating Arrays

Shape and Reshaping

Array Indexing

Boolean Indexing

Element-wise Operations

Matrix Operations

Broadcasting

Arrays automatically expand to compatible shapes:

Array Methods

Linear Algebra

Eigenvalues

Random Numbers

Mutability and Copying

Creating Independent Copies

Matplotlib

Two API Approaches

MATLAB-style (implicit):

Multiple Lines

Line Styles and Markers

Subplots

Scatter Plots

Histograms

Contour Plots

3D Surface Plots

Economic Example: Supply and Demand

SciPy

Overview

SciPy builds on NumPy for scientific computing:

  • scipy.stats - Statistical distributions
  • scipy.optimize - Optimization and root-finding
  • scipy.integrate - Numerical integration
  • scipy.linalg - Linear algebra (extended)

Statistical Distributions

Visualizing Distributions

Beta Distribution

Linear Regression

Root Finding

Visualizing Root Finding

Fixed Points

A fixed point satisfies \(x = g(x)\). Use fixed_point to find it:

Optimization

Multivariate Optimization

Visualizing Optimization

Numerical Integration

Application: Option Pricing

SymPy

Overview

SymPy provides symbolic mathematics in Python:

  • Algebraic manipulation (expand, factor, simplify)
  • Equation solving
  • Calculus (limits, derivatives, integrals)
  • Series and summations

Unlike NumPy/SciPy which compute numerical values, SymPy manipulates mathematical expressions symbolically.

Creating Symbols

Solving Equations

Symbolic Calculus: Limits

Symbolic Calculus: Derivatives

Symbolic Calculus: Integration

Series and Summations

Substitution and Evaluation

Economic Application: Cobb-Douglas

Economic Application: Utility Maximization

Summary

Key Takeaways

Python for Scientific Computing

  • Vectorization avoids slow Python loops
  • NumPy, SciPy, Matplotlib form the core stack

NumPy

  • Homogeneous arrays with fast operations
  • Broadcasting for flexible arithmetic
  • Linear algebra via np.linalg

Key Takeaways (continued)

Matplotlib

  • Object-oriented API: fig, ax = plt.subplots()
  • Extensive customization options
  • LaTeX support for mathematical notation

SciPy

  • Statistical distributions in scipy.stats
  • Root finding and optimization in scipy.optimize
  • Numerical integration in scipy.integrate

Key Takeaways (continued)

SymPy

  • Symbolic mathematics vs numerical computation
  • Algebraic manipulation: expand(), factor(), solve()
  • Calculus: limit(), diff(), integrate()
  • Economic applications: marginal products, optimization

Further Reading

All lectures from QuantEcon: Python Programming for Economics and Finance