%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Tutorial slides on Python. % % Author: Prabhu Ramachandran % Copyright (c) 2005-2008, Prabhu Ramachandran %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[14pt,compress]{beamer} %\documentclass[draft]{beamer} %\documentclass[compress,handout]{beamer} %\usepackage{pgfpages} %\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm] % Modified from: generic-ornate-15min-45min.de.tex \mode { \usetheme{Warsaw} \useoutertheme{split} \setbeamercovered{transparent} } \usepackage[english]{babel} \usepackage[latin1]{inputenc} %\usepackage{times} \usepackage[T1]{fontenc} % Taken from Fernando's slides. \usepackage{ae,aecompl} \usepackage{mathpazo,courier,euler} \usepackage[scaled=.95]{helvet} \definecolor{darkgreen}{rgb}{0,0.5,0} \usepackage{listings} \lstset{language=Python, basicstyle=\ttfamily\bfseries, commentstyle=\color{red}\itshape, stringstyle=\color{darkgreen}, showstringspaces=false, keywordstyle=\color{blue}\bfseries} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Macros \setbeamercolor{emphbar}{bg=blue!20, fg=black} \newcommand{\emphbar}[1] {\begin{beamercolorbox}[rounded=true]{emphbar} {#1} \end{beamercolorbox} } \newcounter{time} \setcounter{time}{0} \newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}} \newcommand{\typ}[1]{\lstinline{#1}} \newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}} } %%% This is from Fernando's setup. % \usepackage{color} % \definecolor{orange}{cmyk}{0,0.4,0.8,0.2} % % Use and configure listings package for nicely formatted code % \usepackage{listings} % \lstset{ % language=Python, % basicstyle=\small\ttfamily, % commentstyle=\ttfamily\color{blue}, % stringstyle=\ttfamily\color{orange}, % showstringspaces=false, % breaklines=true, % postbreak = \space\dots % } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Title page \title[]{Numerical Computing with Numpy \& Scipy} \author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran} \institute[FOSSEE] {FOSSEE Team} \date[] {11, October 2009} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo} %\logo{\pgfuseimage{iitmlogo}} %% Delete this, if you do not want the table of contents to pop up at %% the beginning of each subsection: \AtBeginSubsection[] { \begin{frame} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } \AtBeginSection[] { \begin{frame} \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } % If you wish to uncover everything in a step-wise fashion, uncomment % the following command: %\beamerdefaultoverlayspecification{<+->} %\includeonlyframes{current,current1,current2,current3,current4,current5,current6} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % DOCUMENT STARTS \begin{document} \begin{frame} \maketitle \end{frame} \begin{frame}[fragile] \frametitle{Broadcasting} \begin{itemize} \item Used so that functions can take inputs that are not of the same shape. \item 2 rules - \begin{enumerate} \item 1 (repeatedly) pre-pended to shapes of smaller arrays \item Size 1 in a dimension -> Largest size in that dimension \end{enumerate} \end{itemize} \begin{columns} \column{0.65\textwidth} \hspace*{-1.5in} \begin{lstlisting} >>> x = np.arange(4) >>> x+3 array([3, 4, 5, 6]) \end{lstlisting} \column{0.35\textwidth} \includegraphics[height=0.7in, interpolate=true]{data/broadcast_scalar} \end{columns} \end{frame} \begin{frame}[fragile] \frametitle{Broadcasting in 3D} \begin{lstlisting} >>> x = np.zeros((3, 5)) >>> y = np.zeros(8) >>> (x[..., None] + y).shape (3, 5, 8) \end{lstlisting} \begin{figure} \begin{center} \includegraphics[height=1.5in, interpolate=true]{data/array_3x5x8} \end{center} \end{figure} \end{frame} \begin{frame}[fragile] \frametitle{Copies \& Views} \begin{lstlisting} >>> a = array([[1,2,3], [4,5,6], [7,8,9]]) >>> a[0,1:3] array([2, 3]) >>> a[0::2,0::2] array([[1, 3], [7, 9]]) \end{lstlisting} \begin{itemize} \item Slicing and Striding just reference the same memory \item They produce views of the data, not copies \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Copies contd \ldots} \begin{lstlisting} >>> a[np.array([0,1,2])] array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) \end{lstlisting} \begin{itemize} \item Index arrays or Boolean arrays produce copies \end{itemize} \end{frame} \begin{frame} \frametitle{More Numpy Functions \& Methods} More functions \begin{itemize} \item \typ{take} \item \typ{choose} \item \typ{where} \item \typ{compress} \item \typ{concatenate} \end{itemize} Ufunc methods \begin{itemize} \item \typ{reduce} \item \typ{accumulate} \item \typ{outer} \item \typ{reduceat} \end{itemize} \inctime{5} \end{frame} \begin{frame} {Intro to SciPy} \begin{itemize} \item \url{http://www.scipy.org} \item Open source scientific libraries for Python \item Based on NumPy \end{itemize} \end{frame} \begin{frame} \frametitle{SciPy} \begin{itemize} \item Provides: \begin{itemize} \item Linear algebra \item Numerical integration \item Fourier transforms \item Signal processing \item Special functions \item Statistics \item Optimization \item Image processing \item ODE solvers \end{itemize} \item Uses LAPACK, QUADPACK, ODEPACK, FFTPACK etc. from netlib \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Linear Algebra} \typ{>>> from scipy import linalg} \begin{itemize} \item \typ{linalg.det, linalg.norm} \item \typ{linalg.eig, linalg.lu} \item \typ{linalg.expm, linalg.logm} \item \typ{linalg.sinm, linalg.sinhm} \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Linear Algebra \ldots} \begin{align*} 3x + 2y - z & = 1 \\ 2x - 2y + 4z & = -2 \\ -x + \frac{1}{2}y -z & = 0 \end{align*} \begin{lstlisting} >>> linalg.solve(A,B) \end{lstlisting} \end{frame} \begin{frame}[fragile] \begin{itemize} \item Integrating Functions given function object \item Integrating Functions given fixed samples \item Numerical integrators of ODE systems \end{itemize} \frametitle{Integrate} Calculate $\int^1_0sin(x) + x^2$ \begin{lstlisting} >>> def f(x): return np.sin(x)+x**2 >>> integrate.quad(f, 0, 1) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Integrate \ldots} Numerically solve ODEs\\ \begin{align*} \frac{dx}{dt}&=-e^{(-t)}x^2(t)\\ x(0)&=2 \end{align*} \begin{lstlisting} def dx_dt(x,t): return -np.exp(-t)*x**2 x=integrate.odeint(dx_dt, 2, t) plt.plot(x,t) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Interpolation} \begin{itemize} \item \typ{interpolate.interp1d, ...} \item \typ{interpolate.splrep, splev} \end{itemize} Cubic Spline of $sin(x)$ \begin{lstlisting} x = np.arange(0,2*np.pi,np.pi/8) y = np.sin(x) t = interpolate.splrep(x,y,s=0) X = np.arange(0,2*np.pi,np.pi/50) Y = interpolate.splev(X,t,der=0) plt.plot(x,y,'o',x,y,X,Y) plt.show() \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Signal \& Image Processing} \begin{itemize} \item Convolution \item B-splines \item Filtering \item Filter design \item IIR filter design \item Linear Systems \item LTI Reresentations \item Waveforms \item Window functions \item Wavelets \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Signal \& Image Processing} Applying a simple median filter \begin{lstlisting} from scipy import signal, ndimage from scipy import lena A=lena().astype('float32') B=signal.medfilt2d(A) imshow(B) \end{lstlisting} Zooming an array - uses spline interpolation \begin{lstlisting} b=ndimage.zoom(A,0.5) imshow(b) \end{lstlisting} \end{frame} \begin{frame}[fragile] \frametitle{Problems} The Van der Pol oscillator is a type of nonconservative oscillator with nonlinear damping. It evolves in time according to the second order differential equation: \begin{equation*} \frac{d^2x}{dt^2}+\mu(x^2-1)\frac{dx}{dt}+x= 0 \end{equation*} \end{frame} \end{document} - Numpy arrays (30 mins) - Matrices - random number generation. - Image manipulation: jigsaw puzzle. - Monte-carlo integration.