diff options
-rw-r--r-- | day2/data/array_3x5x8.png | bin | 0 -> 294304 bytes | |||
-rw-r--r-- | day2/data/broadcast_2D.png | bin | 0 -> 6165 bytes | |||
-rw-r--r-- | day2/data/broadcast_scalar.png | bin | 0 -> 13609 bytes | |||
-rw-r--r-- | day2/data/cobweb.png | bin | 29071 -> 35137 bytes | |||
-rw-r--r-- | day2/session1.tex | 5 | ||||
-rw-r--r-- | day2/session2.tex | 366 |
6 files changed, 370 insertions, 1 deletions
diff --git a/day2/data/array_3x5x8.png b/day2/data/array_3x5x8.png Binary files differnew file mode 100644 index 0000000..db469ce --- /dev/null +++ b/day2/data/array_3x5x8.png diff --git a/day2/data/broadcast_2D.png b/day2/data/broadcast_2D.png Binary files differnew file mode 100644 index 0000000..cf9c531 --- /dev/null +++ b/day2/data/broadcast_2D.png diff --git a/day2/data/broadcast_scalar.png b/day2/data/broadcast_scalar.png Binary files differnew file mode 100644 index 0000000..482fa02 --- /dev/null +++ b/day2/data/broadcast_scalar.png diff --git a/day2/data/cobweb.png b/day2/data/cobweb.png Binary files differindex 073940b..8516b75 100644 --- a/day2/data/cobweb.png +++ b/day2/data/cobweb.png diff --git a/day2/session1.tex b/day2/session1.tex index 47a6a76..cb3f95a 100644 --- a/day2/session1.tex +++ b/day2/session1.tex @@ -326,7 +326,10 @@ array([[ 0.96276665, 0.77174861], \begin{enumerate} \item Convert an RGB image to Grayscale. $ Y = 0.5R + 0.25G + 0.25B $ \item Scale the image to 50\% - \item Introduce some random noise? + \item Introduce some random noise + \item Smooth the image using a mean filter + \\\small{Take the mean of all the neighbouring elements} + \\\small{How fast can you do it?} \end{enumerate} \inctime{15} \end{frame} diff --git a/day2/session2.tex b/day2/session2.tex new file mode 100644 index 0000000..3b4437a --- /dev/null +++ b/day2/session2.tex @@ -0,0 +1,366 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Tutorial slides on Python. +% +% Author: Prabhu Ramachandran <prabhu at aero.iitb.ac.in> +% 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<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[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}<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. + + |