summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--day2/data/array_3x5x8.pngbin0 -> 294304 bytes
-rw-r--r--day2/data/broadcast_2D.pngbin0 -> 6165 bytes
-rw-r--r--day2/data/broadcast_scalar.pngbin0 -> 13609 bytes
-rw-r--r--day2/data/cobweb.pngbin29071 -> 35137 bytes
-rw-r--r--day2/session1.tex5
-rw-r--r--day2/session2.tex366
6 files changed, 370 insertions, 1 deletions
diff --git a/day2/data/array_3x5x8.png b/day2/data/array_3x5x8.png
new file mode 100644
index 0000000..db469ce
--- /dev/null
+++ b/day2/data/array_3x5x8.png
Binary files differ
diff --git a/day2/data/broadcast_2D.png b/day2/data/broadcast_2D.png
new file mode 100644
index 0000000..cf9c531
--- /dev/null
+++ b/day2/data/broadcast_2D.png
Binary files differ
diff --git a/day2/data/broadcast_scalar.png b/day2/data/broadcast_scalar.png
new file mode 100644
index 0000000..482fa02
--- /dev/null
+++ b/day2/data/broadcast_scalar.png
Binary files differ
diff --git a/day2/data/cobweb.png b/day2/data/cobweb.png
index 073940b..8516b75 100644
--- a/day2/data/cobweb.png
+++ b/day2/data/cobweb.png
Binary files differ
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.
+
+