# HG changeset patch # User Puneeth Chaganti # Date 1254820308 -19800 # Node ID d5b7be72693b47570af6bb896f82584e5f436285 # Parent 8047755ae6605db8e15a146365b0ec0692e64024 Updated Day2 Session2. diff -r 8047755ae660 -r d5b7be72693b day2/session2.tex --- 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} -