diff options
Diffstat (limited to 'scipy/basic/06_numpy.tex')
-rw-r--r-- | scipy/basic/06_numpy.tex | 551 |
1 files changed, 551 insertions, 0 deletions
diff --git a/scipy/basic/06_numpy.tex b/scipy/basic/06_numpy.tex new file mode 100644 index 0000000..0f5e17c --- /dev/null +++ b/scipy/basic/06_numpy.tex @@ -0,0 +1,551 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%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<presentation> +{ + \usetheme{Warsaw} + \useoutertheme{infolines} + \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}}} } + +\newcommand{\num}{\texttt{numpy}} + +%%% 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[NumPy arrays]{Introductory Scientific Computing with +Python} +\subtitle{NumPy arrays} + +\author[FOSSEE] {FOSSEE} + +\institute[FOSSEE -- IITB] {Department of Aerospace Engineering\\IIT Bombay} +\date[] {Mumbai, India} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%\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} + \titlepage +\end{frame} + +\begin{frame} + \frametitle{Outline} + \tableofcontents + % You might wish to add the option [pausesections] +\end{frame} + + +\section{\num\ arrays} + +\begin{frame}[fragile] + \frametitle{The \num\ module} + \begin{itemize} + \item Efficient, powerful array type + \item Abstracts out standard operations on arrays + \item Convenience functions + \item \typ{ipython --pylab} imports part of numpy + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Without Pylab} +\begin{lstlisting} +In []: from numpy import * +In []: x = linspace(0, 1) +\end{lstlisting} + Note that we had done this ``import'' earlier! +\begin{lstlisting} +# Can also do this: +In []: import numpy +In []: x = numpy.linspace(0, 1) +# or +In []: import numpy as np +In []: x = np.linspace(0, 1) +\end{lstlisting} + Note the use of \typ{numpy.linspace} +\end{frame} + +\begin{frame} + \frametitle{\num\ arrays} + \begin{itemize} + \item Fixed size (\typ{arr.size}) + \item Same type (\typ{arr.dtype}) + \item Arbitrary dimensionality: \typ{arr.shape} + \item \typ{shape}: extent (size) along each dimension + \item \typ{arr.itemsize}: number of bytes per element + \item \alert{Note:} \typ{shape} can change so long as the \typ{size} + is constant + \item Indices start from 0 + \item Negative indices work like lists + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\num\ arrays} +\begin{lstlisting} +In []: a = array([1,2,3,4]) +In []: b = array([2,3,4,5]) + +In []: print(a[0], a[-1]) +(1, 4) + +In []: a[0] = -1 +In []: a[0] = 1 +\end{lstlisting} +Operations are elementwise +\end{frame} + +\begin{frame}[fragile] + \frametitle{Simple operations} +\begin{lstlisting} +In []: a + b +Out[]: array([3, 5, 7, 9]) +In []: a*b +Out[]: array([2, 6, 12, 20]) +In []: a/b +Out[]: array([0, 0, 0, 0]) +\end{lstlisting} + \begin{itemize} + \item Operations are \alert{element-wise} + \item Types matter (only on Python 2.x) + \end{itemize} + \inctime{10} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Data type matters} + Try again with this: +\begin{lstlisting} +In []: a = array([1.,2,3,4]) +In []: a/b +\end{lstlisting} + This can happen on Python 2.x, so beware +\end{frame} + +\begin{frame}[fragile] + \frametitle{Examples} +\noindent \typ{pi} and \typ{e} are defined. +\begin{lstlisting} +In []: x = linspace(0.0, 10.0, 200) +In []: x *= 2*pi/10 +# apply functions to array. +In []: y = sin(x) +In []: y = cos(x) +In []: x[0] = -1 +In []: print(x[0], x[-1]) +(-1.0, 10.0) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{\typ{size, shape, rank} etc.} +\vspace*{-8pt} +\begin{lstlisting} +In []: x = array([1., 2, 3, 4]) +In []: size(x) +Out[]: 4 +In []: x.dtype +dtype('float64') +In []: x.shape +Out[] (4,) +In []: rank(x) +Out[]: 1 +In []: x.itemsize +Out[]: 8 +\end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Multi-dimensional arrays} +\begin{lstlisting} +In []: a = array([[ 0, 1, 2, 3], + ...: [10,11,12,13]]) +In []: a.shape # (rows, columns) +Out[]: (2, 4) + +In []: a[1,3] +Out[]: 13 + +In []: a[1,3] = -1 +In []: a[1] # The second row +array([10,11,12,-1]) +In []: a[1] = 0 # Entire row to zero. +\end{lstlisting} +\inctime{10} +\end{frame} + +\subsection{Slicing arrays} + +\begin{frame}[plain,fragile] + \frametitle{Slicing arrays} + \vspace*{-0.2in} +\begin{lstlisting} +In []: a = array([[1,2,3], [4,5,6], + ...: [7,8,9]]) +In []: a[0,1:3] +\end{lstlisting} + \pause + \vspace*{-0.1in} +\begin{lstlisting} +Out[]: array([2, 3]) + +In []: a[1:,1:] +\end{lstlisting} + \pause + \vspace*{-0.1in} +\begin{lstlisting} +Out[]: array([[5, 6], + [8, 9]]) + +In []: a[:,2] +\end{lstlisting} + \pause + \vspace*{-0.1in} +\begin{lstlisting} +Out[]: array([3, 6, 9]) +\end{lstlisting} +\end{frame} + +\begin{frame}[plain,fragile] + \frametitle{Slicing arrays ...} + \vspace*{-0.2in} +\begin{lstlisting} +In []: a = array([[1,2,3], [4,5,6], + ...: [7,8,9]]) + +In []: a[0::2,0::2] # Striding... +\end{lstlisting} + \pause + \vspace*{-0.1in} +\begin{lstlisting} +Out[]: array([[1, 3], + [7, 9]]) +# Slices refer to the same memory! +\end{lstlisting} +\end{frame} + +\subsection{Array creation} + +\begin{frame}[fragile] + \frametitle{Array creation functions} + \begin{itemize} + \item \typ{array(object)} + \item \typ{linspace(start, stop, num=50)} + \item \typ{ones(shape)} + \item \typ{zeros((d1,...,dn))} + \item \typ{empty((d1,...,dn))} + \item \typ{identity(n)} + \item \typ{ones\_like(x)}, \typ{zeros\_like(x)}, \typ{empty\_like(x)} + \end{itemize} + May pass an optional \typ{dtype=} keyword argument + + For more dtypes see: \typ{numpy.typeDict} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Creation examples} + \vspace*{-0.25in} +\begin{lstlisting} +In []: a = array([1,2,3], dtype=float) +In []: ones_like(a) +Out[]: array([ 1., 1., 1.]) + +In []: ones( (2, 3) ) +Out[]: array([[ 1., 1., 1.], + [ 1., 1., 1.]]) + +In []: identity(3) +Out[]: array([[ 1., 0., 0.], + [ 0., 1., 0.], + [ 0., 0., 1.]]) +\end{lstlisting} + \inctime{15} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Array math} + \begin{itemize} + \item Basic \alert{elementwise} math (given two arrays \typ{a, b}): + \begin{itemize} + \item \typ{a + b} $\rightarrow$ \typ{add(a, b)} + \item \typ{a - b}, $\rightarrow$ \typ{subtract(a, b)} + \item \typ{a * b}, $\rightarrow$ \typ{multiply(a, b)} + \item \typ{a / b}, $\rightarrow$ \typ{divide(a, b)} + \item \typ{a \% b}, $\rightarrow$ \typ{remainder(a, b)} + \item \typ{a ** b}, $\rightarrow$ \typ{power(a, b)} + \end{itemize} + \item Inplace operators: \typ{a += b}, or \typ{add(a, b, + a)} + \alert{What happens if \typ{a} is \typ{int} and \typ{b} is \typ{float?}} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Array math} + \begin{itemize} + \item Logical operations: \typ{==, !=, <, >}, etc. + \item \typ{sin(x), arcsin(x), sinh(x)}, + \typ{exp(x), sqrt(x)} etc. + \item \typ{sum(x, axis=0), product(x, axis=0)} + \item \typ{dot(a, b)} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Convenience functions: \typ{loadtxt}} + \begin{itemize} + \item \typ{loadtxt(file_name)}: loads a text file + \item \typ{loadtxt(file_name, unpack=True)}: loads a text file and + unpacks columns + \end{itemize} + \begin{lstlisting} +In []: x = loadtxt('pendulum.txt') +In []: x.shape +Out[]: (90, 2) + +In []: x, y = loadtxt('pendulum.txt', + ...: unpack=True) +In []: x.shape +Out[]: (90,) + \end{lstlisting} + + \inctime{10} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Advanced} + \begin{itemize} + \item Only scratched the surface of \num + \item \typ{reduce, outer} + \item Typecasting + \item More functions: \typ{take, choose, where}, \typ{compress, + concatenate} + \item Array broadcasting and \typ{None} + \item Record arrays + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Learn more} + \small + \begin{itemize} + \item \url{https://docs.scipy.org/doc/numpy-dev/user/quickstart.html} + \item \url{http://numpy.org} + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Recap} + \begin{itemize} + \item Basic concepts: creation, access, operations + \item 1D, multi-dimensional + \item Slicing + \item Array creation, dtypes + \item Math + \item \typ{loadtxt} + \end{itemize} + \inctime{5} +\end{frame} + +\subsection{Example: plotting data from file} + +\begin{frame}[fragile] +\frametitle{Example: plotting data from file} +\alert{Data is usually present in a file!} \\ +Lets look at the \typ{pendulum.txt} file. +\begin{lstlisting} +In []: cat pendulum.txt +1.0000e-01 6.9004e-01 +1.1000e-01 6.9497e-01 +1.2000e-01 7.4252e-01 +1.3000e-01 7.5360e-01 +\end{lstlisting} +\ldots +\end{frame} + +\begin{frame}[fragile] +\frametitle{Reading \typ{pendulum.txt}} +\begin{itemize} + \item File contains L vs.\ T values + \item First Column - L values + \item Second Column - T values + \item Let us generate a plot from the data file +\end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Gotcha and an aside} + Ensure you are in the same directory as \typ{pendulum.txt}\\ + if not, do the following on IPython: + \begin{lstlisting} +In []: %cd directory_containing_file +# Check if pendulum.txt is there. +In []: ls +# Also try +In []: !ls + \end{lstlisting} + + \alert{Note:} \typ{\%cd} is an IPython magic command. For more information + do: + \begin{lstlisting} +In []: ? +In []: %cd? + \end{lstlisting} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Exercise} + \begin{itemize} + \item Plot L versus T square with dots + \item No line connecting points + \end{itemize} + \inctime{10} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Solution} +\begin{lstlisting} +In []: L, t = loadtxt('pendulum.txt', + ....: unpack=True) +In []: plot(L, t*t, '.') +\end{lstlisting} +or +\begin{lstlisting} +In []: x = loadtxt('pendulum.txt') +In []: L, t = x[:,0], x[:,1] +In []: plot(L, t*t, '.') +\end{lstlisting} + +\end{frame} + + +\begin{frame}[fragile] +\begin{figure} +\includegraphics[width=3.5in]{data/L-Tsq.png} +\end{figure} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Odds and ends} +\begin{lstlisting} +In []: mean(L) +Out[]: 0.54499999999999993 + +In []: std(L) +Out[]: 0.25979158313283879 +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Summary} +\begin{itemize} +\item Introduction to \num\ arrays +\item Slicing arrays +\item Multi-dimensional arrays +\item Array operations +\item Creating arrays +\item Loading data from file +\end{itemize} + +\inctime{5} +\end{frame} + +\end{document} |