summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPuneeth Chaganti2009-10-12 11:56:07 +0530
committerPuneeth Chaganti2009-10-12 11:56:07 +0530
commit163eb47568e337cfaf6260f3e9e97badf2467609 (patch)
treef841834f329de6d9523f8f3fcc8da4be40ae6507
parentb2e65de0dddd0d194a927bc4f5340554fa8c6924 (diff)
downloadworkshops-more-scipy-163eb47568e337cfaf6260f3e9e97badf2467609.tar.gz
workshops-more-scipy-163eb47568e337cfaf6260f3e9e97badf2467609.tar.bz2
workshops-more-scipy-163eb47568e337cfaf6260f3e9e97badf2467609.zip
Changing authors, etc. Changes at BPRIM.
-rw-r--r--day2/session1.tex190
-rw-r--r--day2/session2.tex56
-rw-r--r--day2/session3.tex30
-rw-r--r--day2/tda.tex6
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!