diff -r 7c5431fa2d46 -r ca37cf69cd18 day1/session3.tex --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/day1/session3.tex Thu Dec 09 18:46:09 2010 +0530 @@ -0,0 +1,600 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%Tutorial slides on Python. +% +% Author: FOSSEE +% Copyright (c) 2009, FOSSEE, IIT Bombay +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\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{infolines} + \setbeamercovered{transparent} +} + +\usepackage[english]{babel} +\usepackage[latin1]{inputenc} +%\usepackage{times} +\usepackage[T1]{fontenc} +\usepackage{amsmath} + +% 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[Arrays]{Python for Science and Engg: Arrays} + +\author[FOSSEE] {FOSSEE} + +\institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} +\date[] {SciPy 2010, Tutorials} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\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} + \titlepage +\end{frame} + +\begin{frame} + \frametitle{Outline} + \tableofcontents +% \pausesections +\end{frame} + +\section{Matrices} + +\begin{frame} +\frametitle{Matrices: Introduction} +\alert{All matrix operations are done using \kwrd{arrays}} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Matrices: Initializing} +\begin{lstlisting} +In []: c = array([[11,12,13], + [21,22,23], + [31,32,33]]) + +In []: c +Out[]: +array([[11, 12, 13], + [21, 22, 23], + [31, 32, 33]]) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Initializing some special matrices} +\begin{small} + \begin{lstlisting} +In []: ones((3,5)) +Out[]: +array([[ 1., 1., 1., 1., 1.], + [ 1., 1., 1., 1., 1.], + [ 1., 1., 1., 1., 1.]]) + +In []: ones_like([1, 2, 3, 4]) +Out[]: array([1, 1, 1, 1]) + +In []: identity(2) +Out[]: +array([[ 1., 0.], + [ 0., 1.]]) + \end{lstlisting} +Also available \alert{\typ{zeros, zeros_like, empty, empty_like}} +\end{small} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Accessing elements} + \begin{small} + \begin{lstlisting} +In []: c +Out[]: +array([[11, 12, 13], + [21, 22, 23], + [31, 32, 33]]) + +In []: c[1][2] +Out[]: 23 +In []: c[1,2] +Out[]: 23 + +In []: c[1] +Out[]: array([21, 22, 23]) + \end{lstlisting} + \end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Changing elements} + \begin{small} + \begin{lstlisting} +In []: c[1,1] = -22 +In []: c +Out[]: +array([[ 11, 12, 13], + [ 21, -22, 23], + [ 31, 32, 33]]) + +In []: c[1] = 0 +In []: c +Out[]: +array([[11, 12, 13], + [ 0, 0, 0], + [31, 32, 33]]) + \end{lstlisting} + \end{small} +How do you access one \alert{column}? +\end{frame} + +\begin{frame}[fragile] + \frametitle{Slicing} +\begin{small} + \begin{lstlisting} +In []: c[:,1] +Out[]: array([12, 0, 32]) + +In []: c[1,:] +Out[]: array([0, 0, 0]) + +In []: c[0:2,:] +Out[]: +array([[11, 12, 13], + [ 0, 0, 0]]) + +In []: c[1:3,:] +Out[]: +array([[ 0, 0, 0], + [31, 32, 33]]) + \end{lstlisting} +\end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Slicing \ldots} +\begin{small} + \begin{lstlisting} +In []: c[:2,:] +Out[]: +array([[11, 12, 13], + [ 0, 0, 0]]) + +In []: c[1:,:] +Out[]: +array([[ 0, 0, 0], + [31, 32, 33]]) + +In []: c[1:,:2] +Out[]: +array([[ 0, 0], + [31, 32]]) + \end{lstlisting} + +\end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Striding} + \begin{small} + \begin{lstlisting} +In []: c[::2,:] +Out[]: +array([[11, 12, 13], + [31, 32, 33]]) + +In []: c[:,::2] +Out[]: +array([[11, 13], + [ 0, 0], + [31, 33]]) + +In []: c[::2,::2] +Out[]: +array([[11, 13], + [31, 33]]) + \end{lstlisting} + \end{small} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Shape of a matrix} + \begin{lstlisting} +In []: c +Out[]: +array([[11, 12, 13], + [ 0, 0, 0], + [31, 32, 33]]) + +In []: c.shape +Out[]: (3, 3) + \end{lstlisting} +\emphbar{Shape specifies shape or dimensions of a matrix} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Elementary image processing} +\begin{small} + \begin{lstlisting} +In []: a = imread('lena.png') + +In []: imshow(a) +Out[]: + \end{lstlisting} + \end{small} +\typ{imread} returns an array of shape (512, 512, 4) which represents an image of 512x512 pixels and 4 shades.\\ +\typ{imshow} renders the array as an image. +\end{frame} + +\begin{frame}[fragile] +\frametitle{Slicing \& Striding Exercises} + \begin{itemize} + \item Crop the image to get the top-left quarter + \item Crop the image to get only the face + \item Resize image to half by dropping alternate pixels + \end{itemize} + +\end{frame} +\begin{frame}[fragile] + \frametitle{Solutions} +\begin{small} + \begin{lstlisting} +In []: imshow(a[:256,:256]) +Out[]: + +In []: imshow(a[200:400,200:400]) +Out[]: + +In []: imshow(a[::2,::2]) +Out[]: + \end{lstlisting} +\end{small} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Transpose of a Matrix} +\begin{lstlisting} +In []: a = array([[ 1, 1, 2, -1], + ...: [ 2, 5, -1, -9], + ...: [ 2, 1, -1, 3], + ...: [ 1, -3, 2, 7]]) + +In []: a.T +Out[]: +array([[ 1, 2, 2, 1], + [ 1, 5, 1, -3], + [ 2, -1, -1, 2], + [-1, -9, 3, 7]]) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Matrix Addition} + \begin{lstlisting} +In []: b = array([[3,2,-1,5], + [2,-2,4,9], + [-1,0.5,-1,-7], + [9,-5,7,3]]) +In []: a + b +Out[]: +array([[ 4. , 3. , 1. , 4. ], + [ 4. , 3. , 3. , 0. ], + [ 1. , 1.5, -2. , -4. ], + [ 10. , -8. , 9. , 10. ]]) + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Elementwise Multiplication} +\begin{lstlisting} +In []: a*b +Out[]: +array([[ 3. , 2. , -2. , -5. ], + [ 4. , -10. , -4. , -81. ], + [ -2. , 0.5, 1. , -21. ], + [ 9. , 15. , 14. , 21. ]]) + +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Matrix Multiplication} +\begin{lstlisting} +In []: dot(a, b) +Out[]: +array([[ -6. , 6. , -6. , -3. ], + [-64. , 38.5, -44. , 35. ], + [ 36. , -13.5, 24. , 35. ], + [ 58. , -26. , 34. , -15. ]]) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Inverse of a Matrix} +\begin{lstlisting} + +\end{lstlisting} +\begin{small} +\begin{lstlisting} +In []: inv(a) +Out[]: +array([[-0.5 , 0.55, -0.15, 0.7 ], + [ 0.75, -0.5 , 0.5 , -0.75], + [ 0.5 , -0.15, -0.05, -0.1 ], + [ 0.25, -0.25, 0.25, -0.25]]) +\end{lstlisting} +\end{small} +\emphbar{Try this: \typ{I = dot(a, inv(a))}} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Determinant and sum of all elements} +\begin{lstlisting} +In []: det(a) +Out[]: 80.0 +\end{lstlisting} + \begin{lstlisting} +In []: sum(a) +Out[]: 12 + \end{lstlisting} + +\end{frame} + +%%use S=array(X,Y) +\begin{frame}[fragile] +\frametitle{Eigenvalues and Eigen Vectors} +\begin{small} +\begin{lstlisting} +In []: e = array([[3,2,4],[2,0,2],[4,2,3]]) + +In []: eig(e) +Out[]: +(array([-1., 8., -1.]), + array([[-0.74535599, 0.66666667, -0.1931126 ], + [ 0.2981424 , 0.33333333, -0.78664085], + [ 0.59628479, 0.66666667, 0.58643303]])) + +In []: eigvals(e) +Out[]: array([-1., 8., -1.]) +\end{lstlisting} +\end{small} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Computing Norms} +\begin{lstlisting} +In []: norm(e) +Out[]: 8.1240384046359608 +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Singular Value Decomposition} + \begin{small} + \begin{lstlisting} +In []: svd(e) +Out[]: +(array( +[[ -6.66666667e-01, -1.23702565e-16, 7.45355992e-01], + [ -3.33333333e-01, -8.94427191e-01, -2.98142397e-01], + [ -6.66666667e-01, 4.47213595e-01, -5.96284794e-01]]), + array([ 8., 1., 1.]), + array([[-0.66666667, -0.33333333, -0.66666667], + [-0. , 0.89442719, -0.4472136 ], + [-0.74535599, 0.2981424 , 0.59628479]])) + \end{lstlisting} + \end{small} +\end{frame} + +\section{Summary} +\begin{frame} + \frametitle{What did we learn?} + \begin{itemize} + \item Matrices + \begin{itemize} + \item Initializing + \item Accessing elements + \item Slicing and Striding + \item Transpose + \item Addition + \item Multiplication + \item Inverse of a matrix + \item Determinant + \item Eigenvalues and Eigen vector + \item Singular Value Decomposition + \end{itemize} + \item Least Square Curve fitting + \end{itemize} +\end{frame} + +\end{document} + +%% Questions for Quiz %% +%% ------------------ %% + +\begin{frame}[fragile] +\frametitle{\incqno } +\begin{lstlisting} +In []: a = array([[1, 2], + [3, 4]]) +In []: a[1,0] = 0 +\end{lstlisting} +What is the resulting array? +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } +\begin{lstlisting} + In []: x = array(([1,2,3,4], + [2,3,4,5])) + In []: x[-2][-3] = 4 + In []: print x +\end{lstlisting} +What will be printed? +\end{frame} + +%% \begin{frame}[fragile] +%% \frametitle{\incqno } +%% \begin{lstlisting} +%% In []: x = array([[1,2,3,4], +%% [3,4,2,5]]) +%% \end{lstlisting} +%% What is the \lstinline+shape+ of this array? +%% \end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } +\begin{lstlisting} + In []: x = array([[1,2,3,4]]) +\end{lstlisting} +How to change \lstinline+x+ to \lstinline+array([[1,2,0,4]])+? +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } +\begin{lstlisting} + In []: x = array([[1,2,3,4], + [3,4,2,5]]) +\end{lstlisting} +How do you get the following slice of \lstinline+x+? +\begin{lstlisting} +array([[2,3], + [4,2]]) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } +\begin{lstlisting} + In []: x = array([[9,18,27], + [30,60,90], + [14,7,1]]) +\end{lstlisting} +What is the output of \lstinline+x[::3,::3]+ +\end{frame} + + +\begin{frame}[fragile] +\frametitle{\incqno } +\begin{lstlisting} +In []: a = array([[1, 2], + [3, 4]]) +\end{lstlisting} +How do you get the transpose of this array? +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } +\begin{lstlisting} +In []: a = array([[1, 2], + [3, 4]]) +In []: b = array([[1, 1], + [2, 2]]) +In []: a*b +\end{lstlisting} +What does this produce? +\end{frame} + +\begin{frame} +\frametitle{\incqno } +What command do you use to find the inverse of a matrix and its +eigenvalues? +\end{frame} + +%% \begin{frame} +%% \frametitle{\incqno } +%% The file \lstinline+datafile.txt+ contains 3 columns of data. What +%% command will you use to read the entire data file into an array? +%% \end{frame} + +%% \begin{frame} +%% \frametitle{\incqno } +%% If the contents of the file \lstinline+datafile.txt+ is read into an +%% $N\times3$ array called \lstinline+data+, how would you obtain the third +%% column of this data? +%% \end{frame} +