diff options
-rw-r--r-- | day2/session1.tex | 190 | ||||
-rw-r--r-- | day2/session2.tex | 56 | ||||
-rw-r--r-- | day2/session3.tex | 30 | ||||
-rw-r--r-- | day2/tda.tex | 6 |
4 files changed, 153 insertions, 129 deletions
diff --git a/day2/session1.tex b/day2/session1.tex index ae51e72..5ba1c0d 100644 --- a/day2/session1.tex +++ b/day2/session1.tex @@ -72,9 +72,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Title page -\title[]{Matrices and Arrays\\ \& \\2D Plotting} +\title[]{Arrays\\ \& \\2D Plotting} -\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran} +\author[FOSSEE Team] {FOSSEE} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {11, October 2009} @@ -125,12 +125,12 @@ % You might wish to add the option [pausesections] \end{frame} -\section{Matrices and Arrays} +\section{Arrays} \subsection{Basic \typ{numpy}} \begin{frame} - \frametitle{The \num module} + \frametitle{The \num\ module} \begin{itemize} \item Why? \item What: @@ -145,9 +145,9 @@ \frametitle{Examples of \num} \begin{lstlisting} # Simple array math example ->>> import numpy as np ->>> a = np.array([1,2,3,4]) ->>> b = np.arange(2,6) +>>> from numpy import * +>>> a = array([1,2,3,4]) +>>> b = arange(2,6) >>> b array([2,3,4,5]) >>> a*2 + b + 1 # Basic math! @@ -159,42 +159,28 @@ array([5, 8, 11, 14]) \frametitle{Examples of \num} \begin{lstlisting} # Pi and e are defined. ->>> x = np.linspace(0.0, 10.0, 1000) ->>> x *= 2*np.pi/10 # inplace. +>>> x = linspace(0.0, 10.0, 1000) +>>> x *= 2*pi/10 # inplace. # apply functions to array. ->>> y = np.sin(x) ->>> z = np.exp(y) +>>> y = sin(x) +>>> z = exp(y) \end{lstlisting} \inctime{5} \end{frame} -\begin{frame} - \frametitle{Basic concepts} - \begin{itemize} - \item fixed size (\typ{arr.size}); - \item Same type (\typ{arr.dtype}) of data - \item arbitrary dimensionality - \item \typ{arr.shape}: size in each dimension - \item \alert{Note:} \typ{len(arr) != arr.size} in general - \item \alert{Note:} By default array operations are performed - \alert{elementwise} - \end{itemize} -\end{frame} - - \begin{frame}[fragile] \frametitle{More examples of \num} \vspace*{-8pt} \begin{lstlisting} ->>> x = np.array([1., 2, 3, 4]) ->>> np.size(x) +>>> x = array([1., 2, 3, 4]) +>>> size(x) 4 >>> x.dtype # What is a.dtype? dtype('float64') >>> x.shape (4,) ->>> print np.rank(x), x.itemsize -1 8 +>>> print x.itemsize +8 >>> x[0] = 10 >>> print x[0], x[-1] 10.0 4.0 @@ -204,16 +190,16 @@ dtype('float64') \begin{frame}[fragile] \frametitle{Multi-dimensional arrays} \begin{lstlisting} ->>> a = np.array([[ 0, 1, 2, 3], +>>> a = array([[ 0, 1, 2, 3], ... [10,11,12,13]]) >>> a.shape # (rows, columns) (2, 4) +>>> a.shape=4,2 # Accessing and setting values +>>> a[1][3] >>> a[1,3] -13 >>> a[1,3] = -1 >>> a[1] # The second row -array([10,11,12,-1]) \end{lstlisting} \end{frame} @@ -222,15 +208,15 @@ array([10,11,12,-1]) \begin{itemize} \item Basic \alert{elementwise} math (given two arrays \typ{a, b}): \typ{+, -, *, /, \%} - \item Inplace operators: \typ{a += b}, or \typ{np.add(a, b, a)} etc. - \item \typ{np.sum(x, axis=0)}, - \typ{np.product(x, axis=0)}, - \typ{np.dot(a, bp)} + \item Inplace operators: \typ{a += b} + \item \typ{sum(x, axis=0)}, + \typ{product(x, axis=0)}, + \typ{dot(a, bp)} \end{itemize} \begin{lstlisting} ->>> b=np.array([[0,2,4,2],[1,2,3,4]]) ->>> np.add(a,b,a) ->>> np.sum(x,axis=1) +>>> x = array([[0,2,4,2],[1,2,3,4]]) +>>> sum(x) +>>> sum(x,axis=1) \end{lstlisting} \end{frame} @@ -239,50 +225,65 @@ array([10,11,12,-1]) \begin{itemize} \item Logical operations: \typ{==}, \typ{!=}, \typ{<}, \typ{>} etc. - \item Trig and other functions: \typ{np.sin(x),} - \typ{np.arcsin(x), np.sinh(x),} - \typ{np.exp(x), np.sqrt(x)} etc. + \item Trig and other functions: \typ{sin(x),} + \typ{arcsin(x), sinh(x),} + \typ{exp(x), sqrt(x)} etc. \end{itemize} \begin{lstlisting} >>> a<4, a!=3 ->>> np.sqrt(a) +>>> sqrt(a) \end{lstlisting} \inctime{10} \end{frame} +\begin{frame} + \frametitle{Summary of Concepts} + \begin{itemize} + \item fixed size (\typ{arr.size}); + \item Same type (\typ{arr.dtype}) of data + \item arbitrary dimensionality + \item \typ{arr.shape}: size in each dimension + \item \alert{Note:} \typ{len(arr) != arr.size} in general + \item \alert{Note:} By default array operations are performed + \alert{elementwise} + \end{itemize} +\end{frame} + \subsection{Array Creation \& Slicing, Striding Arrays} \begin{frame}[fragile] \frametitle{Array creation functions} \begin{itemize} - \item \typ{np.array(object,dtype=None,...)} + \item \typ{array?} \alert{\#Doc string reading} + \item \typ{array(object,dtype=None,...)} \begin{lstlisting} ->>> np.array([2,3,4]) +>>> array([2,3,4]) array([2, 3, 4]) \end{lstlisting} - \item \typ{np.linspace(start,stop,num)} + \item \typ{linspace(start,stop,num)} \begin{lstlisting} ->>> np.linspace(0, 2, 4) +>>> linspace(0, 2, 4) array([0.,0.6666667,1.3333333,2.]) \end{lstlisting} - \item Also try \typ{np.arange} + \item \typ{arange?} + \alert{\# float version of range} \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Array creation functions cont.} \begin{itemize} - \item \typ{np.ones(shape, dtype=None, ...)} + \item \typ{ones(shape, dtype=None, ...)} \begin{lstlisting} ->>>np.ones((2,2)) +>>> ones((2,2)) array([[ 1., 1.], [ 1., 1.]]) \end{lstlisting} - \item \typ{np.identity(n)} - \item \typ{np.ones\_like(x)} + \item \typ{identity(n)} + \item \typ{ones\_like(x)} \begin{lstlisting} ->>>a = np.array([[1,2,3],[4,5,6]]) ->>>np.ones_like(a) +>>> a = array([[1,2,3],[4,5,6]]) +>>> ones_like(a) array([[1, 1, 1], [1, 1, 1]]) \end{lstlisting} @@ -293,7 +294,7 @@ array([[1, 1, 1], \begin{frame}[fragile] \frametitle{Slicing arrays} \begin{lstlisting} ->>> a = np.array([[1,2,3], [4,5,6], +>>> a = array([[1,2,3], [4,5,6], [7,8,9]]) >>> a[0,1:3] array([2, 3]) @@ -302,8 +303,6 @@ array([[5, 6], [8, 9]]) >>> a[:,2] array([3, 6, 9]) ->>> a[...,2] -array([3, 6, 9]) \end{lstlisting} \end{frame} @@ -321,21 +320,41 @@ array([[1, 3], \begin{frame}[fragile] \frametitle{Random Numbers} \begin{lstlisting} ->>> np.random.rand(3,2) +>>> random.random() +0.94134734326214331 +>>> random.random(2) +array([ 0.73955352, 0.49463645]) +>>> random.random(3,2) array([[ 0.96276665, 0.77174861], [ 0.35138557, 0.61462271], [ 0.16789255, 0.43848811]]) ->>> np.random.randint(1,100) -42 \end{lstlisting} \inctime{15} \end{frame} \begin{frame}[fragile] - \frametitle{Problem Set} + \frametitle{Problem} + Finite difference + \begin{equation*} + \frac{sin(x+h)-sin(x)}{h} + \end{equation*} + \begin{lstlisting} + >>> x = linspace(0,2*pi,100) + >>> y = sin(x) + >>> deltax = x[1]-x[0] + \end{lstlisting} + \pause + \begin{enumerate} + \item Given this, get the finite difference of sin in the range 0 to 2*pi + \end{enumerate} +\end{frame} + + +\begin{frame}[fragile] + \frametitle{Advanced Problem} \begin{lstlisting} >>> from scipy import misc - >>> A=misc.imread(name) + >>> A=misc.imread('filename') >>> misc.imshow(A) \end{lstlisting} \begin{enumerate} @@ -355,7 +374,7 @@ array([[ 0.96276665, 0.77174861], \begin{frame} {IPython's \typ{pylab} mode} -\begin{block}{Immediate use:} +\begin{block}{Immediate use -} \typ{\$ ipython -pylab} \end{block} \begin{itemize} @@ -379,7 +398,7 @@ array([[ 0.96276665, 0.77174861], >>> savefig('/tmp/test.png') \end{lstlisting} \begin{itemize} - \item Also: PDF, PS, EPS, SVG, PDF + \item Also: PS, EPS, SVG, PDF \end{itemize} \inctime{5} \end{frame} @@ -412,11 +431,6 @@ array([[ 0.96276665, 0.77174861], >>> xlabel('$\omega$') >>> title(r"$f(\omega)=e^{-\omega^2} cos({\omega^2})$") ->>> annotate('maxima',xy=(0, 1), - xytext=(1, 0.8), - arrowprops=dict( - facecolor='black', - shrink=0.05)) \end{lstlisting} \end{frame} @@ -424,7 +438,7 @@ array([[ 0.96276665, 0.77174861], \begin{frame}[fragile] \frametitle{Legends} \begin{lstlisting} ->>> x = linspace(0, 2*np.pi, 1000) +>>> x = linspace(0, 2*pi, 1000) >>> plot(x, cos(5*x), 'r--', label='cosine') >>> plot(x, sin(5*x), 'g--', @@ -773,11 +787,11 @@ title('triangular head; scale '\ \begin{frame} \frametitle{Problem Set} - \begin{enumerate} - \item Write a function that plots any regular n-gon given \typ{n}. - \item Consider the logistic map, $f(x) = kx(1-x)$, plot it for + \begin{itemize} + \item[1] Write a function that plots any regular n-gon given \typ{n}. + \item[2] Consider the logistic map, $f(x) = kx(1-x)$, plot it for $k=2.5, 3.5$ and $4$ in the same plot. -\end{enumerate} +\end{itemize} \end{frame} \begin{frame}[fragile] @@ -785,23 +799,29 @@ title('triangular head; scale '\ \begin{columns} \column{0.6\textwidth} \small{ - \begin{enumerate} - \item Consider the iteration $x_{n+1} = f(x_n)$ where $f(x) = kx(1-x)$. Plot the successive iterates of this process. - \item Plot this using a cobweb plot as follows: - \begin{enumerate} - \item Start at $(x_0, 0)$ - \item Draw line to $(x_i, f(x_i))$; - \item Set $x_i = f(x_i)$ - \item Draw line to $(x_i, x_i)$ - \item Repeat from 2 for as long as you want - \end{enumerate} - \end{enumerate}} + \begin{itemize} + \item[3] Consider the iteration $x_{n+1} = f(x_n)$ where $f(x) = kx(1-x)$. Plot the successive iterates of this process as explained below. + \end{itemize}} \column{0.35\textwidth} \hspace*{-0.5in} \includegraphics[height=1.6in, interpolate=true]{data/cobweb} \end{columns} +\end{frame} + +\begin{frame} + + Plot the cobweb plot as follows: + \begin{enumerate} + \item Start at $(x_0, 0)$ ($\implies$ i=0) + \item Draw a line to $(x_i, f(x_i))$ + \item Set $x_{i+1} = f(x_i)$ + \item Draw a line to $(x_{i+1}, x_{i+1})$ + \item $(i\implies i+1)$ + \item Repeat from 2 for as long as you want + \end{enumerate} \inctime{20} \end{frame} + \begin{frame}{Summary} \begin{itemize} \item Basics of Numpy. diff --git a/day2/session2.tex b/day2/session2.tex index 8b390cf..2519057 100644 --- a/day2/session2.tex +++ b/day2/session2.tex @@ -75,7 +75,7 @@ % Title page \title[]{Numerical Computing with Numpy \& Scipy} -\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran} +\author[FOSSEE Team] {FOSSEE} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {11, October 2009} @@ -121,11 +121,11 @@ \begin{frame}[fragile] \frametitle{Broadcasting} \begin{lstlisting} - >>> a = np.arange(4) - >>> b = np.arange(5) + >>> a = arange(4) + >>> b = arange(5) >>> a+b #Does this work? >>> a+3 - >>> c=np.array([3]) + >>> c = array([3]) >>> a+c #Works! >>> b+c #But how? >>> a.shape, b.shape, c.shape @@ -141,29 +141,21 @@ \column{0.65\textwidth} \hspace*{-1.5in} \begin{lstlisting} - >>> a = np.arange(4) + >>> a = arange(4) >>> a+3 array([3, 4, 5, 6]) \end{lstlisting} \column{0.35\textwidth} \includegraphics[height=0.7in, interpolate=true]{data/broadcast_scalar} \end{columns} - \begin{itemize} - \item Allows functions to take inputs that are not of the same shape - \item 2 rules - - \begin{enumerate} - \item 1 is (repeatedly) prepended to shapes of smaller arrays - \item Size 1 in a dimension changed to Largest size in that dimension - \end{enumerate} - \end{itemize} \end{frame} \begin{frame}[fragile] \frametitle{Broadcasting in 3D} \begin{lstlisting} - >>> x = np.ones((3, 5)) - >>> y = np.ones(8) - >>> (x[..., None] + y).shape + >>> x = ones((3, 5, 1)) + >>> y = ones(8) + >>> (x + y).shape (3, 5, 8) \end{lstlisting} \begin{figure} @@ -177,7 +169,7 @@ \frametitle{Copies \& Views} \vspace{-0.1in} \begin{lstlisting} - >>> a = np.arange(1,9); a.shape=3,3 + >>> a = arange(1,9); a.shape=3,3 >>> b = a >>> b is a >>> b[0,0]=0; print a @@ -211,12 +203,10 @@ \begin{frame}[fragile] \frametitle{Copies contd \ldots} \begin{lstlisting} - >>> b = a[np.array([0,1,2])] - array([[1, 2, 3], - [4, 5, 6], - [7, 8, 9]]) + >>> a = arange(1, 10, 2) + >>> b = a[array([0,2,3])] >>> b.flags.owndata - >>> abool=np.greater(a,2) + >>> abool=a>5 >>> c = a[abool] >>> c.flags.owndata \end{lstlisting} @@ -326,7 +316,7 @@ Calculate the area under $(sin(x) + x^2)$ in the range $(0,1)$ \begin{lstlisting} >>> def f(x): - return np.sin(x)+x**2 + return sin(x)+x**2 >>> integrate.quad(f, 0, 1) \end{lstlisting} \end{frame} @@ -340,8 +330,8 @@ \end{align*} \begin{lstlisting} >>> def dx_dt(x,t): - return -np.exp(-t)*x**2 ->>> t = np.linspace(0,2,100) + return -exp(-t)*x**2 +>>> t = linspace(0,2,100) >>> x = integrate.odeint(dx_dt, 2, t) >>> plt.plot(x,t) \end{lstlisting} @@ -354,14 +344,14 @@ \begin{lstlisting} >>> from scipy import interpolate >>> interpolate.interp1d? ->>> x = np.arange(0,2*np.pi,np.pi/4) ->>> y = np.sin(x) +>>> x = arange(0,2*pi,pi/4) +>>> y = sin(x) >>> fl = interpolate.interp1d( x,y,kind='linear') >>> fc = interpolate.interp1d( x,y,kind='cubic') ->>> fl(np.pi/3) ->>> fc(np.pi/3) +>>> fl(pi/3) +>>> fc(pi/3) \end{lstlisting} \end{frame} @@ -370,7 +360,7 @@ Plot the Cubic Spline of $sin(x)$ \begin{lstlisting} >>> tck = interpolate.splrep(x,y) ->>> xs = np.arange(0,2*np.pi,np.pi/50) +>>> xs = arange(0,2*pi,pi/50) >>> ys = interpolate.splev(X,tck,der=0) >>> plt.plot(x,y,'o',x,y,xs,ys) >>> plt.show() @@ -383,15 +373,12 @@ \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 LTI Representations \item Window functions - \item Wavelets \end{itemize} \end{frame} @@ -409,6 +396,7 @@ \begin{lstlisting} >>> b = ndimage.zoom(A,0.5) >>> imshow(b) +>>> b = ndimage.zoom(A,2) \end{lstlisting} \inctime{5} \end{frame} diff --git a/day2/session3.tex b/day2/session3.tex index b4d30d3..d262ab5 100644 --- a/day2/session3.tex +++ b/day2/session3.tex @@ -97,12 +97,12 @@ % Title page \title[]{3D data Visualization} -\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran} +\author[FOSSEE Team] {FOSSEE} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} -\date[] {11, October 2009} -\date[] % (optional) -} +\date[]{11, October 2009} +%\date[] % (optional) + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\pgfdeclareimage[height=0.75cm]{iitblogo}{iitblogo} @@ -111,8 +111,7 @@ \AtBeginSection[] { \begin{frame}<beamer> - \frametitle{Outline} - \Large + \frametitle{Outline} \tableofcontents[currentsection,currentsubsection] \end{frame} } @@ -144,7 +143,6 @@ \begin{frame} \frametitle{Outline} - \Large \tableofcontents % You might wish to add the option [pausesections] \end{frame} @@ -476,6 +474,24 @@ x, y, z = mgrid[-50:50:20j,-50:50:20j, -10:60:20j] \end{lstlisting} \inctime{20} + +\end{frame} +\begin{frame}[fragile] + \frametitle{Solution} + \begin{lstlisting} +def lorenz(x,y,z,s=10.,r=28.,b=8./3.): + u = s*(y-x) + v = r*x-y-x*z + w = x*y-b*z + return u,v,w +x,y,z = mgrid [-50:50:20j,-50:50:20j, + -10:60:20j ] +u,v,w = lorenz( x , y , z ) +# Your plot here +# +mlab.show() + + \end{lstlisting} \end{frame} \end{document} diff --git a/day2/tda.tex b/day2/tda.tex index 664eed3..7e32ef9 100644 --- a/day2/tda.tex +++ b/day2/tda.tex @@ -97,12 +97,12 @@ % Title page \title[]{Test Driven Approach} -\author[FOSSEE Team] {Asokan Pichai\\Prabhu Ramachandran} +\author[FOSSEE Team] {FOSSEE} \institute[IIT Bombay] {Department of Aerospace Engineering\\IIT Bombay} \date[] {11, October 2009} \date[] % (optional) -} + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %\pgfdeclareimage[height=0.75cm]{iitblogo}{iitblogo} @@ -145,7 +145,7 @@ \section{Test Driven Approach} \begin{frame} - \frametitle{Testing code with \typ{nosetests}} + \frametitle{Testing code with nosetests} \begin{itemize} \item Writing tests is really simple! |