Industrial manufacturing
Industrial Internet of Things | Industrial materials | Equipment Maintenance and Repair | Industrial programming |
home  MfgRobots >> Industrial manufacturing >  >> Industrial programming >> Python

SciPy in Python: A Comprehensive Tutorial on Libraries & Functions

SciPy in Python

SciPy is an open‑source library that extends NumPy to provide tools for solving mathematical, scientific, engineering, and technical problems. Built on top of NumPy, SciPy offers a broad set of high‑level commands for data manipulation and visualization.

Sub‑packages

This tutorial covers:

Why Use SciPy?

NumPy vs. SciPy

NumPy

SciPy

Installation & Environment Setup

Install SciPy with pip or system package managers:

Python3 -m pip install --user numpy scipy
sudo apt-get install python-scipy python-numpy
sudo port install py35-scipy py35-numpy

Import SciPy and NumPy in your scripts:

from scipy import special
import numpy as np

File I/O with scipy.io

Save and load MATLAB .mat files easily:

import numpy as np
from scipy import io as sio
array = np.ones((4, 4))
sio.savemat('example.mat', {'ar': array})
loaded = sio.loadmat('example.mat', struct_as_record=True)
print(loaded['ar'])

Output:

array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

Special Functions – scipy.special

Examples of commonly used special functions:

Linear Algebra – scipy.linalg

Compute determinant, inverse, eigenvalues, and eigenvectors:

from scipy import linalg
import numpy as np
A = np.array([[4,5],[3,2]])
print(linalg.det(A))  # -7.0
print(linalg.inv(A))  # inverse matrix
vals, vecs = linalg.eig(A)
print(vals)
print(vecs)

Output:

-7.0
array([[-0.28571429,  0.71428571],
       [ 0.42857143, -0.57142857]])
[ 9.+0.j -1.+0.j]
[[ 0.70710678 -0.5547002 ]
 [ 0.70710678  0.83205029]]

Discrete Fourier Transform – scipy.fftpack

Transform a sinusoid and visualize its spectrum:

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
from scipy import fftpack

freq = 5
sample_rate = 50
t = np.linspace(0, 2, 2 * sample_rate, endpoint=False)
wave = np.sin(freq * 2 * np.pi * t)
plt.plot(t, wave)
plt.xlabel('Time (s)'); plt.ylabel('Amplitude')
plt.show()

A = fftpack.fft(wave)
frequency = fftpack.fftfreq(len(wave)) * sample_rate
plt.stem(frequency, np.abs(A))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.xlim(-sample_rate/2, sample_rate/2)
plt.ylim(0, 110)
plt.show()

Optimization – scipy.optimize

Find the minimum of a scalar function using BFGS and global search with basin‑hopping:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

def func(a):
    return a*2 + 20*np.sin(a)

plt.plot(np.linspace(-10, 10, 400), func(np.linspace(-10, 10, 400)))
plt.show()

min_bfgs = optimize.fmin_bfgs(func, 0)
print('BFGS result:', min_bfgs)

min_basin = optimize.basinhopping(func, 0)
print('Basin‑hopping result:', min_basin.x)

Output shows the local minimum found by BFGS and the global optimum confirmed by basin‑hopping.

Nelder‑Mead Algorithm

Simple unconstrained minimization without gradient information:

from scipy.optimize import minimize

def f(x):
    return 0.4*(1 - x[0])**2

res = minimize(f, [2, -1], method='Nelder-Mead')
print('Result:', res.x, 'Function value:', res.fun)

Image Processing – scipy.ndimage

Manipulate images: display, flip, rotate, and apply filters.

from scipy import ndimage, misc
from matplotlib import pyplot as plt

panda = misc.face()
plt.imshow(panda)
plt.title('Original')
plt.show()

flip_down = np.flipud(panda)
plt.imshow(flip_down)
plt.title('Flip Down')
plt.show()

rotated = ndimage.rotate(panda, 135)
plt.imshow(rotated)
plt.title('Rotated 135°')
plt.show()

Numerical Integration – scipy.integrate

Single and double integrals with automatic error estimation:

from scipy import integrate

# Single integral of x^2 from 0 to 1
single = integrate.quad(lambda x: x**2, 0, 1)
print('Single integral:', single)

# Double integral of 64*x*y over a triangular domain
double = integrate.dblquad(lambda x, y: 64*x*y,
                           0, 2/4,
                           lambda x: 0,
                           lambda y: (1 - 2*y**2)**0.5)
print('Double integral:', double)

Both return a tuple: (value, estimated error).

Summary

SciPy extends NumPy to provide a complete scientific computing stack, including linear algebra, optimization, statistics, signal processing, and image manipulation. Its extensive sub‑packages and robust community support make it indispensable for researchers and engineers.

Package Name Description
scipy.io File input/output for MATLAB, CSV, NetCDF, etc.
scipy.special Special mathematical functions (Bessel, Gamma, etc.)
scipy.linalg Advanced linear‑algebra routines
scipy.interpolate Interpolation methods
scipy.optimize Optimization and curve fitting tools
scipy.stats Statistical distributions & random number generation
scipy.integrate Numerical integration (quad, dblquad, etc.)
scipy.fftpack Fast Fourier transforms
scipy.signal Signal processing utilities
scipy.ndimage Multi‑dimensional image processing

Python

  1. Mastering C Standard Library Functions: A Practical Guide
  2. Master Python Functions: Syntax, Types, and Practical Examples
  3. Master Python’s str.count(): How to Count Characters & Substrings with Examples
  4. Mastering Python Functions: Definition, Calling, Indentation, Arguments & Return Values
  5. Master Python Lambda Functions: Practical Examples & Best Practices
  6. Python round() Function Explained with Practical Examples
  7. SciPy in Python: A Comprehensive Tutorial on Libraries & Functions
  8. Python Matrix Operations with NumPy: Transpose, Addition, Multiplication & Slicing – A Practical Guide
  9. Comprehensive PyQt5 Tutorial: Build Professional GUIs in Python
  10. Python Functions Explained: Building Reusable Code Modules