diff options
author | Prabhu Ramachandran | 2016-12-22 14:27:10 +0530 |
---|---|---|
committer | Prabhu Ramachandran | 2016-12-22 14:27:10 +0530 |
commit | ec9e25ee2f401901ff3abc1722ec774ccdba7d8f (patch) | |
tree | f154c657956a0d77c658b5ecde839a32d437e3c0 /scipy | |
parent | 5df1e86d78fa82bc919db42fd7a17b1266279c39 (diff) | |
download | python-workshops-ec9e25ee2f401901ff3abc1722ec774ccdba7d8f.tar.gz python-workshops-ec9e25ee2f401901ff3abc1722ec774ccdba7d8f.tar.bz2 python-workshops-ec9e25ee2f401901ff3abc1722ec774ccdba7d8f.zip |
Split session2 into two parts.
Diffstat (limited to 'scipy')
-rw-r--r-- | scipy/basic/Makefile | 3 | ||||
-rw-r--r-- | scipy/basic/session2a.tex | 608 | ||||
-rw-r--r-- | scipy/basic/session2b.tex (renamed from scipy/basic/session2.tex) | 429 |
3 files changed, 624 insertions, 416 deletions
diff --git a/scipy/basic/Makefile b/scipy/basic/Makefile index 1d7892a..60243f1 100644 --- a/scipy/basic/Makefile +++ b/scipy/basic/Makefile @@ -6,7 +6,8 @@ SLIDES= intro.pdf prelims.pdf session1a.pdf \ session1b.pdf \ - session2.pdf \ + session2a.pdf \ + session2b.pdf \ session3.pdf \ session4.pdf \ mlab.pdf diff --git a/scipy/basic/session2a.tex b/scipy/basic/session2a.tex new file mode 100644 index 0000000..0230456 --- /dev/null +++ b/scipy/basic/session2a.tex @@ -0,0 +1,608 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%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[Interactive Plotting]{Introductory Scientific Computing with +Python} +\subtitle{More plotting, lists and 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{Plotting Points} +\begin{frame}[fragile] +\frametitle{Why would I plot f(x)?} +Do we plot analytical functions or experimental data? +\begin{small} +\begin{lstlisting} +In []: time = [0., 1., 2, 3] + +In []: distance = [7., 11, 15, 19] + +In []: plot(time,distance) +Out[]: [<matplotlib.lines.Line2D object at 0xa73aa8c>] + +In []: xlabel('time') +Out[]: <matplotlib.text.Text object at 0x986e9ac> + +In []: ylabel('distance') +Out[]: <matplotlib.text.Text object at 0x98746ec> +\end{lstlisting} +\end{small} +\end{frame} + +\begin{frame}[fragile] +\begin{figure} +\includegraphics[width=3.5in]{data/straightline.png} +\end{figure} +\alert{Is this what you have?} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Plotting points} +\begin{itemize} +\item What if we want to plot the points? +\end{itemize} +\begin{lstlisting} + In []: clf() + + In []: plot(time, distance, 'o') + Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>] + + In []: clf() + In []: plot(time, distance, '.') + Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>] +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\begin{figure} +\includegraphics[interpolate=true,width=2.35in]{data/stline_dots.png} +\includegraphics[interpolate=true,width=2.35in]{data/stline_points.png} +\end{figure} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Additional Line Styles} +\begin{itemize} + \item \typ{'o'} - Filled circles + \item \typ{'.'} - Small Dots + \item \typ{'-'} - Lines + \item \typ{'--'} - Dashed lines +\end{itemize} +\end{frame} + +\section{Lists} +\begin{frame}[fragile] + \frametitle{Lists: Introduction} + \begin{lstlisting} +In []: time = [0., 1., 2, 3] + +In []: distance = [7., 11, 15, 19] + \end{lstlisting} +What are \typ{time} and \typ{distance}?\\ +\begin{center} + \large +\alert{\typ{lists!!}} +\end{center} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Lists: Initializing \& accessing elements} +\begin{lstlisting} +In []: mtlist = [] +\end{lstlisting} +\emphbar{Empty List} +\begin{lstlisting} +In []: p = [ 2, 3, 5, 7] + +In []: p[1] +Out[]: 3 + +In []: p[0]+p[1]+p[-1] +Out[]: 12 +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{List: Slicing} + \begin{block}{Remember\ldots} + \kwrd{In []: p = [ 2, 3, 5, 7]} + \end{block} +\begin{lstlisting} +In []: p[1:3] +Out[]: [3, 5] +\end{lstlisting} +\emphbar{A slice} +\begin{lstlisting} +In []: p[0:-1] +Out[]: [2, 3, 5] +In []: p[1:] +Out[]: [3, 5, 7] +\end{lstlisting} +\end{frame} + +\begin{frame}[plain,fragile] + \frametitle{List: Slicing \ldots} + \vspace*{-0.1in} + \begin{small} + \begin{block}{Remember\ldots} + \kwrd{In []: p = [ 2, 3, 5, 7]} +\end{block} +\end{small} +\begin{lstlisting} +In []: p[0:4:2] +Out[]: [2, 5] +In []: p[0::2] +Out[]: [2, 5] +In []: p[::2] +Out[]: [2, 5] +In []: p[::3] +Out[]: [2, 7] +In []: p[::-1] +Out[]: [7, 5, 3, 2] +\end{lstlisting} +\alert{\typ{list[initial:final:step]}} +\end{frame} + +\begin{frame}[fragile] + \frametitle{List: Slicing} + \begin{block}{Remember\ldots} + \kwrd{In []: p = [ 2, 3, 5, 7]} + \end{block} + What is the output of the following? +\begin{lstlisting} +In []: p[1::2] + +In []: p[1:-1:2] +\end{lstlisting} +\end{frame} + + +%% more on list slicing +\begin{frame}[fragile] +\frametitle{List operations} +\begin{lstlisting} +In []: b = [ 11, 13, 17] +In []: c = p + b + +In []: c +Out[]: [2, 3, 5, 7, 11, 13, 17] + +In []: p.append(11) +In []: p +Out[]: [ 2, 3, 5, 7, 11] +\end{lstlisting} +Question: Does \typ{c} change now that \typ{p} is changed? +\inctime{10} +\end{frame} + +\section{Simple Pendulum} +\begin{frame}[fragile] +\frametitle{Simple Pendulum - L and T} +Let us look at the Simple Pendulum experiment. +\begin{center} +\begin{small} +\begin{tabular}{| c | c | c |} +\hline +$L$ & $T$ & $T^2$ \\ \hline +0.2 & 0.90 & \\ \hline +0.3 & 1.19 & \\ \hline +0.4 & 1.30 & \\ \hline +0.5 & 1.47 & \\ \hline +0.6 & 1.58 & \\ \hline +0.7 & 1.77 & \\ \hline +0.8 & 1.83 & \\ \hline +\end{tabular} +\end{small}\\ +\alert{$L \alpha T^2$} +\end{center} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Lets use lists} +\begin{lstlisting} +In []: L = [0.2, 0.3, 0.4, 0.5, + 0.6, 0.7, 0.8] + +In []: t = [0.90, 1.19, 1.30, + 1.47, 1.58, 1.77, + 1.83] +\end{lstlisting} +\alert{Gotcha}: Make sure \typ{L} and \typ{t} have the same number +of elements + +\begin{lstlisting} +In []: print len(L), len(t) +\end{lstlisting} + +\end{frame} + +\begin{frame}[fragile] +\frametitle{Plotting $L$ vs $T^2$} +\begin{itemize} +\item We must square each of the values in \typ{t} +\item How do we do it? +\item We use a \kwrd{for} loop to iterate over \typ{t} +\end{itemize} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Looping with \texttt{for}} +\begin{lstlisting} +In []: for time in t: + ....: print(time*time) + ....: + ....: +\end{lstlisting} +This will print the square of each item in the list, \typ{t} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Plotting $L$ vs $T^2$} +\begin{lstlisting} +In []: tsq = [] + +In []: for time in t: + ....: tsq.append(time*time) + ....: + ....: + +\end{lstlisting} +This gives \typ{tsq} which is the list of squares of \typ{t} values. +\begin{lstlisting} +In []: print(len(L), len(t), len(tsq)) +Out[]: (7, 7, 7) + +In []: plot(L, tsq) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\begin{figure} +\includegraphics[width=3.5in]{data/L-TSq-limited.png} +\end{figure} +\inctime{10} +\end{frame} + + +\begin{frame}[fragile] +\frametitle{Don't repeat yourself: functions} +\noindent Let us define a function to square the list +\begin{lstlisting} +In []: def sqr(arr): + ...: result = [] + ...: for x in arr: + ...: result.append(x*x) + ...: return result + ...: + +In []: tsq = sqr(t) + +\end{lstlisting} %$ +\end{frame} + +\begin{frame}[fragile] + \frametitle{More on defining functions} + \begin{itemize} + \item Consider the function \texttt{f(x) = x\textasciicircum{}2} + \item Let's write a Python function, equivalent to this + \end{itemize} + \begin{lstlisting} + In[]: def f(x): + ....: return x*x + ....: + + In[]: f(1) + In[]: f(2) + \end{lstlisting} + \begin{itemize} + \item \texttt{def} is a keyword + \item \texttt{f} is the name of the function + \item \texttt{x} the parameter of the function (local variable) + \item \texttt{return} is a keyword + \end{itemize} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Aside: Exercise} + \begin{itemize} + \item Write a function called \typ{mysum(a, b)} that returns sum of two + arguments. + \end{itemize} + \pause +\begin{lstlisting} +In []: def mysum(a, b): + ...: return a + b + ...: +In []: mysum(1, 2) + +In []: mysum([1, 2], [3, 4]) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{This seems tedious} + + \begin{itemize} + \item Do we have to write a function just to get the square of a list? + \item Lists +\begin{itemize} + \item Nice + \item Not too convenient for math + \item Slow +\end{itemize} +\item Enter NumPy arrays + \begin{itemize} + \item Fixed size, data type + \item Very convenient + \item Fast + \end{itemize} + \end{itemize} + \inctime{10} +\end{frame} + +\subsection{\num\ arrays} + +\begin{frame}[fragile] +\frametitle{NumPy arrays} +\begin{lstlisting} +In []: t = array(t) + +In []: tsq = t*t + +In []: print(tsq) + +In []: plot(L, tsq) # works! +\end{lstlisting} %$ +\end{frame} + +\begin{frame}[fragile] +\frametitle{Speed?} + +\noindent Lets use range to create a large list. + +\begin{lstlisting} +In []: t = range(1000000) + +In []: tsq = sqr(t) + +\end{lstlisting} %$ + +\noindent Now try it with + +\begin{lstlisting} +In []: t = array(t) + +In []: tsq = t*t +\end{lstlisting} +\ldots +\end{frame} + + +\begin{frame}[fragile] + \frametitle{IPython tip: Timing} + +Try the following: + \begin{lstlisting} +In []: %timeit sqr(t) + +In []: %timeit? + + \end{lstlisting} + + \begin{itemize} + \item \typ{\%timeit}: accurate, many measurements + \item Can also use \typ{\%time} + \item \typ{\%time}: less accurate, one measurement + \end{itemize} + +\inctime{10} +\end{frame} + + +\begin{frame}[fragile] +\frametitle{Exercise} +\begin{center} + Find out the speed difference between the \typ{sqr} function and + \typ{t*t} on the numpy array. +\end{center} + +\end{frame} + +\begin{frame}[fragile] + \frametitle{Solution} +\begin{lstlisting} +In []: t = linspace(0, 10, 100000) +In []: %timeit sqr(t) +In []: %timeit t*t +\end{lstlisting} + \inctime{5} +\end{frame} + +\begin{frame}[fragile] +\frametitle{Summary} +\begin{itemize} +\item Plot attributes +\item plotting points +\item Lists +\item Defining simple functions +\item Introduction to \num\ arrays +\item Timing with \typ{\%timeit} +\end{itemize} +\end{frame} + +\end{document} + +%% Questions for Quiz %% +%% ------------------ %% + +\begin{frame}[fragile] +\frametitle{\incqno } + \begin{lstlisting} + In []: a = [1, 2, 5, 9] + In []: a[0:-1] + \end{lstlisting} + What is the output? +\end{frame} + +\begin{frame} +\frametitle{\incqno } + How do you combine two lists \emph{a} and \emph{b} to produce one list? +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } + \begin{lstlisting} + In []: a = [1, 2, 5, 9] + \end{lstlisting} + How do you add the value 10 to the end of this list? +\end{frame} + +\begin{frame} +\frametitle{\incqno } +Write the code to read a file \texttt{data.txt} and print each line of it? +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } +What would be the result of the following code snippet: +\begin{lstlisting} +In []: x = linspace(0, 10, 50) +In []: y = linspace(50, 100, 100) +In []: plot(x, y) +\end{lstlisting} +\end{frame} + +\begin{frame}[fragile] +\frametitle{\incqno } +The following code snippet has an error/bug: +\begin{lstlisting} +In []: l = [0.1, 0.2, 0.3, 0.4] +In []: t = [0.69, 0.90, 1.19, 1.30] +In []: tsq = [] +In []: for time in t: + ....: tsq.append(time*time) + ....: plot(l, tsq) +\end{lstlisting} +What is the error? How do you fix it? +\end{frame} diff --git a/scipy/basic/session2.tex b/scipy/basic/session2b.tex index a806988..dd97597 100644 --- a/scipy/basic/session2.tex +++ b/scipy/basic/session2b.tex @@ -77,7 +77,7 @@ % Title page \title[Interactive Plotting]{Introductory Scientific Computing with Python} -\subtitle{More plotting, lists and numpy arrays} +\subtitle{Numpy arrays} \author[FOSSEE] {FOSSEE} @@ -128,416 +128,8 @@ Python} % You might wish to add the option [pausesections] \end{frame} -\section{Plotting Points} -\begin{frame}[fragile] -\frametitle{Why would I plot f(x)?} -Do we plot analytical functions or experimental data? -\begin{small} -\begin{lstlisting} -In []: time = [0., 1., 2, 3] - -In []: distance = [7., 11, 15, 19] - -In []: plot(time,distance) -Out[]: [<matplotlib.lines.Line2D object at 0xa73aa8c>] - -In []: xlabel('time') -Out[]: <matplotlib.text.Text object at 0x986e9ac> - -In []: ylabel('distance') -Out[]: <matplotlib.text.Text object at 0x98746ec> -\end{lstlisting} -\end{small} -\end{frame} - -\begin{frame}[fragile] -\begin{figure} -\includegraphics[width=3.5in]{data/straightline.png} -\end{figure} -\alert{Is this what you have?} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Plotting points} -\begin{itemize} -\item What if we want to plot the points? -\end{itemize} -\begin{lstlisting} - In []: clf() - - In []: plot(time, distance, 'o') - Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>] - - In []: clf() - In []: plot(time, distance, '.') - Out[]: [<matplotlib.lines.Line2D object at 0xac17e0c>] -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\begin{figure} -\includegraphics[interpolate=true,width=2.35in]{data/stline_dots.png} -\includegraphics[interpolate=true,width=2.35in]{data/stline_points.png} -\end{figure} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Additional Line Styles} -\begin{itemize} - \item \typ{'o'} - Filled circles - \item \typ{'.'} - Small Dots - \item \typ{'-'} - Lines - \item \typ{'--'} - Dashed lines -\end{itemize} -\end{frame} - -\section{Lists} -\begin{frame}[fragile] - \frametitle{Lists: Introduction} - \begin{lstlisting} -In []: time = [0., 1., 2, 3] - -In []: distance = [7., 11, 15, 19] - \end{lstlisting} -What are \typ{time} and \typ{distance}?\\ -\begin{center} - \large -\alert{\typ{lists!!}} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Lists: Initializing \& accessing elements} -\begin{lstlisting} -In []: mtlist = [] -\end{lstlisting} -\emphbar{Empty List} -\begin{lstlisting} -In []: p = [ 2, 3, 5, 7] - -In []: p[1] -Out[]: 3 - -In []: p[0]+p[1]+p[-1] -Out[]: 12 -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{List: Slicing} - \begin{block}{Remember\ldots} - \kwrd{In []: p = [ 2, 3, 5, 7]} - \end{block} -\begin{lstlisting} -In []: p[1:3] -Out[]: [3, 5] -\end{lstlisting} -\emphbar{A slice} -\begin{lstlisting} -In []: p[0:-1] -Out[]: [2, 3, 5] -In []: p[1:] -Out[]: [3, 5, 7] -\end{lstlisting} -\end{frame} - -\begin{frame}[plain,fragile] - \frametitle{List: Slicing \ldots} - \vspace*{-0.1in} - \begin{small} - \begin{block}{Remember\ldots} - \kwrd{In []: p = [ 2, 3, 5, 7]} -\end{block} -\end{small} -\begin{lstlisting} -In []: p[0:4:2] -Out[]: [2, 5] -In []: p[0::2] -Out[]: [2, 5] -In []: p[::2] -Out[]: [2, 5] -In []: p[::3] -Out[]: [2, 7] -In []: p[::-1] -Out[]: [7, 5, 3, 2] -\end{lstlisting} -\alert{\typ{list[initial:final:step]}} -\end{frame} - -\begin{frame}[fragile] - \frametitle{List: Slicing} - \begin{block}{Remember\ldots} - \kwrd{In []: p = [ 2, 3, 5, 7]} - \end{block} - What is the output of the following? -\begin{lstlisting} -In []: p[1::2] - -In []: p[1:-1:2] -\end{lstlisting} -\end{frame} - - -%% more on list slicing -\begin{frame}[fragile] -\frametitle{List operations} -\begin{lstlisting} -In []: b = [ 11, 13, 17] -In []: c = p + b - -In []: c -Out[]: [2, 3, 5, 7, 11, 13, 17] - -In []: p.append(11) -In []: p -Out[]: [ 2, 3, 5, 7, 11] -\end{lstlisting} -Question: Does \typ{c} change now that \typ{p} is changed? -\inctime{10} -\end{frame} - -\section{Simple Pendulum} -\begin{frame}[fragile] -\frametitle{Simple Pendulum - L and T} -Let us look at the Simple Pendulum experiment. -\begin{center} -\begin{small} -\begin{tabular}{| c | c | c |} -\hline -$L$ & $T$ & $T^2$ \\ \hline -0.2 & 0.90 & \\ \hline -0.3 & 1.19 & \\ \hline -0.4 & 1.30 & \\ \hline -0.5 & 1.47 & \\ \hline -0.6 & 1.58 & \\ \hline -0.7 & 1.77 & \\ \hline -0.8 & 1.83 & \\ \hline -\end{tabular} -\end{small}\\ -\alert{$L \alpha T^2$} -\end{center} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Lets use lists} -\begin{lstlisting} -In []: L = [0.2, 0.3, 0.4, 0.5, - 0.6, 0.7, 0.8] - -In []: t = [0.90, 1.19, 1.30, - 1.47, 1.58, 1.77, - 1.83] -\end{lstlisting} -\alert{Gotcha}: Make sure \typ{L} and \typ{t} have the same number -of elements - -\begin{lstlisting} -In []: print len(L), len(t) -\end{lstlisting} - -\end{frame} - -\begin{frame}[fragile] -\frametitle{Plotting $L$ vs $T^2$} -\begin{itemize} -\item We must square each of the values in \typ{t} -\item How do we do it? -\item We use a \kwrd{for} loop to iterate over \typ{t} -\end{itemize} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Looping with \texttt{for}} -\begin{lstlisting} -In []: for time in t: - ....: print(time*time) - ....: - ....: -\end{lstlisting} -This will print the square of each item in the list, \typ{t} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Plotting $L$ vs $T^2$} -\begin{lstlisting} -In []: tsq = [] - -In []: for time in t: - ....: tsq.append(time*time) - ....: - ....: - -\end{lstlisting} -This gives \typ{tsq} which is the list of squares of \typ{t} values. -\begin{lstlisting} -In []: print(len(L), len(t), len(tsq)) -Out[]: (7, 7, 7) - -In []: plot(L, tsq) -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] -\begin{figure} -\includegraphics[width=3.5in]{data/L-TSq-limited.png} -\end{figure} -\inctime{10} -\end{frame} - -\begin{frame}[fragile] -\frametitle{Don't repeat yourself: functions} -\noindent Let us define a function to square the list -\begin{lstlisting} -In []: def sqr(arr): - ...: result = [] - ...: for x in arr: - ...: result.append(x*x) - ...: return result - ...: - -In []: tsq = sqr(t) - -\end{lstlisting} %$ -\end{frame} - -\begin{frame}[fragile] - \frametitle{More on defining functions} - \begin{itemize} - \item Consider the function \texttt{f(x) = x\textasciicircum{}2} - \item Let's write a Python function, equivalent to this - \end{itemize} - \begin{lstlisting} - In[]: def f(x): - ....: return x*x - ....: - - In[]: f(1) - In[]: f(2) - \end{lstlisting} - \begin{itemize} - \item \texttt{def} is a keyword - \item \texttt{f} is the name of the function - \item \texttt{x} the parameter of the function (local variable) - \item \texttt{return} is a keyword - \end{itemize} -\end{frame} - -\begin{frame}[fragile] - \frametitle{Aside: Exercise} - \begin{itemize} - \item Write a function called \typ{mysum(a, b)} that returns sum of two - arguments. - \end{itemize} - \pause -\begin{lstlisting} -In []: def mysum(a, b): - ...: return a + b - ...: -In []: mysum(1, 2) - -In []: mysum([1, 2], [3, 4]) -\end{lstlisting} -\end{frame} - -\begin{frame}[fragile] - \frametitle{This seems tedious} - - \begin{itemize} - \item Do we have to write a function just to get the square of a list? - \item Lists -\begin{itemize} - \item Nice - \item Not too convenient for math - \item Slow -\end{itemize} -\item Enter NumPy arrays - \begin{itemize} - \item Fixed size, data type - \item Very convenient - \item Fast - \end{itemize} - \end{itemize} - \inctime{10} -\end{frame} - -\subsection{\num\ arrays} - -\begin{frame}[fragile] -\frametitle{NumPy arrays} -\begin{lstlisting} -In []: t = array(t) - -In []: tsq = t*t - -In []: print(tsq) - -In []: plot(L, tsq) # works! -\end{lstlisting} %$ -\end{frame} - -\begin{frame}[fragile] -\frametitle{Speed?} - -\noindent Lets use range to create a large list. - -\begin{lstlisting} -In []: t = range(1000000) - -In []: tsq = sqr(t) - -\end{lstlisting} %$ - -\noindent Now try it with - -\begin{lstlisting} -In []: t = array(t) - -In []: tsq = t*t -\end{lstlisting} -\ldots -\end{frame} - - -\begin{frame}[fragile] - \frametitle{IPython tip: Timing} - -Try the following: - \begin{lstlisting} -In []: %timeit sqr(t) - -In []: %timeit? - - \end{lstlisting} - - \begin{itemize} - \item \typ{\%timeit}: accurate, many measurements - \item Can also use \typ{\%time} - \item \typ{\%time}: less accurate, one measurement - \end{itemize} - -\inctime{10} -\end{frame} - - -\begin{frame}[fragile] -\frametitle{Exercise} -\begin{center} - Find out the speed difference between the \typ{sqr} function and - \typ{t*t} on the numpy array. -\end{center} - -\end{frame} - -\begin{frame}[fragile] - \frametitle{Solution} -\begin{lstlisting} -In []: t = linspace(0, 10, 100000) -In []: %timeit sqr(t) -In []: %timeit t*t -\end{lstlisting} - \inctime{5} -\end{frame} +\section{\num\ arrays} \begin{frame}[fragile] \frametitle{The \num\ module} @@ -676,6 +268,8 @@ In []: a[1] = 0 # Entire row to zero. \inctime{10} \end{frame} +\subsection{Slicing arrays} + \begin{frame}[plain,fragile] \frametitle{Slicing arrays} \vspace*{-0.2in} @@ -724,6 +318,7 @@ Out[]: array([[1, 3], \end{lstlisting} \end{frame} +\subsection{Array creation} \begin{frame}[fragile] \frametitle{Array creation functions} @@ -848,6 +443,8 @@ Out[]: (90,) \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!} \\ @@ -936,13 +533,15 @@ Out[]: 0.25979158313283879 \end{lstlisting} \end{frame} -\section {Summary} \begin{frame}[fragile] -\frametitle{What did we learn?} +\frametitle{Summary} \begin{itemize} - \item Plot attributes and plotting points - \item Lists - \item Introduction to \num\ arrays +\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} |