Updated Session-1.tex as per suggestions from yesterday.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Tutorial slides on Python.
%
% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in>
% Copyright (c) 2005-2009, 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<presentation>
{
\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[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay}
\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}<beamer>
\frametitle{Outline}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
}
\AtBeginSection[]
{
\begin{frame}<beamer>
\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}
\inctime{15}
\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}
\inctime{15}
\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}
\inctime{10}
\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}
\inctime{10}
\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)
\inctime{5}
\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*}
\inctime{25}
\end{frame}
\end{document}
- Numpy arrays (30 mins)
- Matrices
- random number generation.
- Image manipulation: jigsaw puzzle.
- Monte-carlo integration.