day2/session2.tex
changeset 37 d5b7be72693b
parent 36 8047755ae660
child 41 64177498937a
--- a/day2/session2.tex	Sun Oct 04 01:26:46 2009 +0530
+++ b/day2/session2.tex	Tue Oct 06 14:41:48 2009 +0530
@@ -113,14 +113,76 @@
 % DOCUMENT STARTS
 \begin{document}
 
+\begin{frame}
+  \maketitle
+\end{frame}
+
 \begin{frame}[fragile]
   \frametitle{Broadcasting}
+  \begin{itemize}
+    \item Used so that functions can take inputs that are not of the same shape.
+    \item 2 rules -
+      \begin{enumerate}
+      \item 1 (repeatedly) pre-pended to shapes of smaller arrays
+      \item Size 1 in a dimension -> Largest size in that dimension
+      \end{enumerate}
+  \end{itemize}
+  \begin{columns}
+    \column{0.65\textwidth}
+    \hspace*{-1.5in}
+    \begin{lstlisting}
+      >>> x = np.arange(4)
+      >>> x+3
+      array([3, 4, 5, 6])
+    \end{lstlisting}
+    \column{0.35\textwidth}
+    \includegraphics[height=0.7in, interpolate=true]{data/broadcast_scalar}
+  \end{columns}
+\end{frame}
 
+\begin{frame}[fragile]
+  \frametitle{Broadcasting in 3D}
+    \begin{lstlisting}
+      >>> x = np.zeros((3, 5))
+      >>> y = np.zeros(8)
+      >>> (x[..., None] + y).shape
+      (3, 5, 8)
+    \end{lstlisting}
+    \begin{figure}
+      \begin{center}
+      \includegraphics[height=1.5in, interpolate=true]{data/array_3x5x8}        
+      \end{center}
+    \end{figure}
 \end{frame}
 
 \begin{frame}[fragile]
   \frametitle{Copies \& Views}
+  \begin{lstlisting}
+    >>> a = array([[1,2,3], [4,5,6],     
+                   [7,8,9]])
+    >>> a[0,1:3]
+    array([2, 3])
+    >>> a[0::2,0::2]
+    array([[1, 3],
+          [7, 9]])
+  \end{lstlisting}
+  \begin{itemize}
+  \item Slicing and Striding just reference the same memory
+  \item They produce views of the data, not copies
+  \end{itemize}
+\end{frame}
 
+\begin{frame}[fragile]
+  \frametitle{Copies contd \ldots}
+  \begin{lstlisting}
+    >>> a[np.array([0,1,2])]
+    array([[1, 2, 3],
+           [4, 5, 6],
+           [7, 8, 9]])
+  \end{lstlisting}
+  \begin{itemize}
+  \item Index arrays or Boolean arrays produce copies
+  \end{itemize}
 \end{frame}
 
 \begin{frame}
@@ -140,6 +202,7 @@
     \item \typ{outer}
     \item \typ{reduceat}
   \end{itemize}
+\inctime{5}
 \end{frame}
 
 \begin{frame}
@@ -149,8 +212,6 @@
   \item Open source scientific libraries for Python
   \item Based on NumPy
     \end{itemize}
-
-    \inctime{25}
 \end{frame}
 
 \begin{frame}
@@ -174,25 +235,117 @@
 
 \begin{frame}[fragile]
   \frametitle{Linear Algebra}
+  \typ{>>> from scipy import linalg}
+  \begin{itemize}
+    \item \typ{linalg.det, linalg.norm}
+    \item \typ{linalg.eig, linalg.lu}
+    \item \typ{linalg.expm, linalg.logm}
+    \item \typ{linalg.sinm, linalg.sinhm}
+  \end{itemize}
+\end{frame}
 
+\begin{frame}[fragile]
+  \frametitle{Linear Algebra \ldots}
+  \begin{align*}
+    3x + 2y - z  & = 1 \\
+    2x - 2y + 4z  & = -2 \\
+    -x + \frac{1}{2}y -z & = 0
+  \end{align*}
+  \begin{lstlisting}
+    >>> linalg.solve(A,B)
+  \end{lstlisting}
 \end{frame}
+
 \begin{frame}[fragile]
-  \frametitle{ODEs}
+  \begin{itemize}
+    \item Integrating Functions given function object
+    \item Integrating Functions given fixed samples
+    \item Numerical integrators of ODE systems
+  \end{itemize}
+  \frametitle{Integrate}
+  Calculate $\int^1_0sin(x) + x^2$
+  \begin{lstlisting}
+    >>> def f(x):
+            return np.sin(x)+x**2
+    >>> integrate.quad(f, 0, 1)
+  \end{lstlisting}
+\end{frame}
 
+\begin{frame}[fragile]
+  \frametitle{Integrate \ldots}
+  Numerically solve ODEs\\
+  \begin{align*}
+  \frac{dx}{dt}&=-e^{(-t)}x^2(t)\\ 
+           x(0)&=2    
+  \end{align*}
+  \begin{lstlisting}
+    def dx_dt(x,t):
+        return -np.exp(-t)*x**2
+
+    x=integrate.odeint(dx_dt, 2, t)
+    plt.plot(x,t)
+  \end{lstlisting}
 \end{frame}
+
 \begin{frame}[fragile]
   \frametitle{Interpolation}
+  \begin{itemize}
+    \item \typ{interpolate.interp1d, ...}
+    \item \typ{interpolate.splrep, splev}
+  \end{itemize}
+  Cubic Spline of $sin(x)$
+  \begin{lstlisting}
+    x = np.arange(0,2*np.pi,np.pi/8)
+    y = np.sin(x)
+    t = interpolate.splrep(x,y,s=0)
+    X = np.arange(0,2*np.pi,np.pi/50)
+    Y = interpolate.splev(X,t,der=0)
 
+    plt.plot(x,y,'o',x,y,X,Y)
+    plt.show()
+  \end{lstlisting}
 \end{frame}
 
 \begin{frame}[fragile]
   \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 Window functions
+     \item Wavelets
+    \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Signal \& Image Processing}
+  Applying a simple median filter
+  \begin{lstlisting}
+    from scipy import signal, ndimage
+    from scipy import lena
+    A=lena().astype('float32')
+    B=signal.medfilt2d(A)
+    imshow(B)
+  \end{lstlisting}
+  Zooming an array - uses spline interpolation
+  \begin{lstlisting}
+    b=ndimage.zoom(A,0.5)
+    imshow(b)
+  \end{lstlisting}
 
 \end{frame}
 
 \begin{frame}[fragile]
   \frametitle{Problems}
-
+  The Van der Pol oscillator is a type of nonconservative oscillator with nonlinear damping. It evolves in time according to the second order differential equation:
+  \begin{equation*}
+  \frac{d^2x}{dt^2}+\mu(x^2-1)\frac{dx}{dt}+x= 0
+  \end{equation*}
 \end{frame}
 
 
@@ -205,20 +358,3 @@
     - Monte-carlo integration.
 
 
-\subsection{SciPy}
-
-\begin{frame}
-  \frametitle{Using \texttt{SciPy}}
-  \begin{itemize}
-  \item SciPy is Open Source software for mathematics, science, and
-    engineering
-  \item \typ{import scipy}
-  \item Built on NumPy
-  \item Provides modules for statistics, optimization, integration,
-    linear algebra, Fourier transforms, signal and image processing,
-    genetic algorithms, ODE solvers, special functions, and more
-  \item Used widely by scientists world over
-  \item Details are beyond the scope of this tutorial
-  \end{itemize}
-\end{frame}
-