SciPy

Scientific computing library providing optimization, signal processing, and statistical functions

Core Scientific Python Stack Essential Core Library Recommend Provisional Teaching

Our View

Recommend Provisional Teaching

SciPy builds on NumPy to provide a comprehensive collection of algorithms for scientific computing. Its signal processing tools are essential for analyzing neural recordings, while its optimization and statistical functions support data analysis and modeling across neuroscience research.

Provisional positions are editorial proposals awaiting group review.

Teaching — Recorded in topic offerings; consult the dated event links for availability.

5 topics with recorded teaching · 9 past offerings · 5 upcoming offerings

Related themes: Neural Data AnalysisScientific Computing

Related topics: AI-Assisted Software DevelopmentArrays and Numerical ComputingCalcium Imaging AnalysisLocal Field Potential (LFP) AnalysisMachine Learning(M)EEG AnalysisNeural Spike Analysis

Common use cases

  • Filter and process neural signals (LFPs, spike trains)
  • Perform Fourier analysis and spectrograms
  • Optimize model parameters and fit data
  • Apply statistical tests and distributions

Getting started

SciPy is a collection of mathematical algorithms and convenience functions built on NumPy. It provides essential tools for scientific and technical computing, particularly for signal processing, optimization, and statistics.

Why SciPy?

  • Comprehensive: Covers most scientific computing needs
  • Efficient: Optimized implementations of algorithms
  • Well-Tested: Reliable, production-ready code
  • Integration: Works seamlessly with NumPy
  • Modular: Import only what you need

Key Modules

Signal Processing (scipy.signal)

Essential for neural data analysis:

from scipy import signal
import numpy as np

# Filter a neural signal
b, a = signal.butter(4, [1, 100], 'bandpass', fs=1000)
filtered = signal.filtfilt(b, a, neural_data)

# Compute power spectral density
freqs, psd = signal.welch(lfp_signal, fs=1000)

# Find peaks in data
peaks, _ = signal.find_peaks(trace, height=threshold)

Fourier Transforms (scipy.fft)

from scipy.fft import fft, fftfreq

# Frequency analysis
spectrum = fft(signal)
frequencies = fftfreq(len(signal), 1/sampling_rate)

Optimization (scipy.optimize)

from scipy.optimize import minimize, curve_fit

# Fit function to data
def model(x, a, b):
    return a * np.exp(-b * x)

params, _ = curve_fit(model, x_data, y_data)

Statistics (scipy.stats)

from scipy.stats import ttest_ind, pearsonr

# Statistical tests
t_stat, p_value = ttest_ind(group1, group2)

# Correlation
r, p = pearsonr(neural_activity, behavior)

Interpolation (scipy.interpolate)

from scipy.interpolate import interp1d

# Resample data
f = interp1d(old_times, values, kind='cubic')
new_values = f(new_times)

Common Use Cases in Neuroscience

LFP Analysis

  • Bandpass filtering for specific frequency bands
  • Hilbert transform for phase and amplitude
  • Spectrogram for time-frequency analysis
  • Coherence between signals

Spike Analysis

  • Convolve with kernels for firing rate estimation
  • Detect spike times from continuous recordings
  • Cross-correlation for spike-field coupling

Calcium Imaging

  • Deconvolve calcium traces to infer spikes
  • Baseline correction and normalization
  • Detect transient events

Getting Started

Install SciPy:

conda install scipy
# or
pip install scipy

Basic example:

from scipy import signal
import numpy as np
import matplotlib.pyplot as plt

# Generate noisy signal
t = np.linspace(0, 1, 1000)
clean = np.sin(2 * np.pi * 5 * t)
noisy = clean + 0.5 * np.random.randn(len(t))

# Filter signal
sos = signal.butter(4, 10, 'low', fs=1000, output='sos')
filtered = signal.sosfilt(sos, noisy)

# Plot
plt.plot(t, noisy, alpha=0.3, label='Noisy')
plt.plot(t, filtered, label='Filtered')
plt.legend()
plt.show()

Tips

  • Use signal.butter with filtfilt for zero-phase filtering
  • Check Nyquist frequency before filtering (fs/2)
  • Use signal.welch instead of raw FFT for power spectra
  • Choose appropriate window functions for spectral analysis
  • Use scipy.stats for statistical tests before Pingouin
  • Consider scipy.ndimage for image processing tasks