# HG changeset patch # User Madhusudan.C.S # Date 1254996763 -19800 # Node ID edfe20d6733c5f633ab041b86480842dd1cb5870 # Parent 9aac0f1284826e2b5130c2a45a6687203fc8ca23# Parent ab9192cfe8705883890876201e86307a2425c90f Merged mainline and Madhu branches. diff -r 9aac0f128482 -r edfe20d6733c day2/session2.tex --- a/day2/session2.tex Thu Oct 08 15:41:59 2009 +0530 +++ b/day2/session2.tex Thu Oct 08 15:42:43 2009 +0530 @@ -116,35 +116,51 @@ \begin{frame} \maketitle \end{frame} +\begin{frame}[fragile] + \frametitle{Broadcasting} + Try it! + \begin{lstlisting} + >>> a = np.arange(4) + >>> b = np.arange(5) + >>> a+b + >>> a+3 + >>> c=np.array([3]) + >>> a+c + >>> b+c + \end{lstlisting} + \begin{itemize} + \item Enter Broadcasting! + \end{itemize} +\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 + >>> a = np.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 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.zeros((3, 5)) - >>> y = np.zeros(8) + >>> x = np.ones((3, 5)) + >>> y = np.ones(8) >>> (x[..., None] + y).shape (3, 5, 8) \end{lstlisting} @@ -157,14 +173,34 @@ \begin{frame}[fragile] \frametitle{Copies \& Views} + Try it! \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]]) + >>> a = np.array([[1,2,3],[4,5,6]]) + >>> b = a + >>> b is a + >>> b[0,0]=0; print a + >>> c = a.view() + >>> c is a + >>> c.base is a + >>> c.flags.owndata + >>> d = a.copy() + >>> d.base is a + >>> d.flags.owndata + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Copies \& Views} + Try it! + \begin{lstlisting} + >>> a = np.arange(1,9) + >>> a.shape=3,3 + >>> b = a[0,1:3] + >>> c = a[0::2,0::2] + >>> a.flags.owndata + >>> b.flags.owndata + >>> b.base + >>> c.base is a \end{lstlisting} \begin{itemize} \item Slicing and Striding just reference the same memory @@ -175,38 +211,22 @@ \begin{frame}[fragile] \frametitle{Copies contd \ldots} \begin{lstlisting} - >>> a[np.array([0,1,2])] + >>> b = a[np.array([0,1,2])] array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) + >>> b.flags.owndata + >>> abool=np.greater(a,2) + >>> c = a[abool] + >>> c.flags.owndata \end{lstlisting} \begin{itemize} - \item Index arrays or Boolean arrays produce copies + \item Indexing arrays or Boolean arrays produce copies \end{itemize} \inctime{15} \end{frame} \begin{frame} - \frametitle{More Numpy Functions \& Methods} - More functions - \begin{itemize} - \item \typ{take} - \item \typ{choose} - \item \typ{where} - \item \typ{compress} - \item \typ{concatenate} - \end{itemize} - Ufunc methods - \begin{itemize} - \item \typ{reduce} - \item \typ{accumulate} - \item \typ{outer} - \item \typ{reduceat} - \end{itemize} -\inctime{5} -\end{frame} - -\begin{frame} {Intro to SciPy} \begin{itemize} \item \url{http://www.scipy.org} @@ -235,37 +255,70 @@ \end{frame} \begin{frame}[fragile] - \frametitle{Linear Algebra} - \typ{>>> from scipy import linalg} + \frametitle{SciPy - Functions \& Submodules} \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} + \item All \typ{numpy} functions are in \typ{scipy} namespace + \item Domain specific functions organized into subpackages + \item Subpackages need to be imported separately \end{itemize} + \begin{lstlisting} + >>> from scipy import linalg + \end{lstlisting} \end{frame} \begin{frame}[fragile] - \frametitle{Linear Algebra \ldots} + \frametitle{Linear Algebra} + Try it! + \begin{lstlisting} + >>> import scipy as sp + >>> from scipy import linalg + >>> A=sp.mat(np.arange(1,10)) + >>> A.shape=3,3 + >>> linalg.inv(A) + >>> linalg.det(A) + >>> linalg.norm(A) + >>> linalg.expm(A) #logm + >>> linalg.sinm(A) #cosm, tanm, ... + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Linear Algebra ...} + Try it! + \begin{lstlisting} + >>> A = sp.mat(np.arange(1,10)) + >>> A.shape=3,3 + >>> linalg.lu(A) + >>> linalg.eig(A) + >>> linalg.eigvals(A) + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Solving Linear Equations} \begin{align*} 3x + 2y - z & = 1 \\ 2x - 2y + 4z & = -2 \\ -x + \frac{1}{2}y -z & = 0 \end{align*} + To Solve this, \begin{lstlisting} + >>> A = sp.mat([[3,2,-1],[2,-2,4] + ,[-1,1/2,-1]]) + >>> B = sp.mat([[1],[-2],[0]]) >>> linalg.solve(A,B) \end{lstlisting} \inctime{15} \end{frame} \begin{frame}[fragile] + \frametitle{Integrate} \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$ + Calculate $\int^1_0(sin(x) + x^2)dx$ \begin{lstlisting} >>> def f(x): return np.sin(x)+x**2 @@ -277,7 +330,7 @@ \frametitle{Integrate \ldots} Numerically solve ODEs\\ \begin{align*} - \frac{dx}{dt}&=-e^{(-t)}x^2(t)\\ + \frac{dx}{dt}&=-e^{-t}x^2\\ x(0)&=2 \end{align*} \begin{lstlisting} @@ -292,18 +345,28 @@ \begin{frame}[fragile] \frametitle{Interpolation} - \begin{itemize} - \item \typ{interpolate.interp1d, ...} - \item \typ{interpolate.splrep, splev} - \end{itemize} + Try it! + \begin{lstlisting} + >>> from scipy import interpolate + >>> interpolate.interp1d? + >>> x = np.arange(0,2*np.pi,np.pi/4) + >>> y = np.sin(x) + >>> fl = interpolate.interp1d(x,y,kind='linear') + >>> fc = interpolate.interp1d(x,y,kind='cubic') + >>> fl(np.pi/3) + >>> fc(np.pi/3) + \end{lstlisting} +\end{frame} + +\begin{frame}[fragile] + \frametitle{Interpolation - Splines} Cubic Spline of $sin(x)$ \begin{lstlisting} - x = np.arange(0,2*np.pi,np.pi/8) + x = np.arange(0,2*np.pi,np.pi/4) y = np.sin(x) - t = interpolate.splrep(x,y,s=0) + tck = interpolate.splrep(x,y) X = np.arange(0,2*np.pi,np.pi/50) - Y = interpolate.splev(X,t,der=0) - + Y = interpolate.splev(X,tck,der=0) plt.plot(x,y,'o',x,y,X,Y) plt.show() \end{lstlisting} @@ -340,9 +403,8 @@ \begin{lstlisting} b=ndimage.zoom(A,0.5) imshow(b) + \end{lstlisting} \inctime{5} - \end{lstlisting} - \end{frame} \begin{frame}[fragile] diff -r 9aac0f128482 -r edfe20d6733c day2/session3.tex --- a/day2/session3.tex Thu Oct 08 15:41:59 2009 +0530 +++ b/day2/session3.tex Thu Oct 08 15:42:43 2009 +0530 @@ -22,7 +22,7 @@ \mode { - \usetheme{CambridgeUS} + \usetheme{Warsaw} %\usetheme{Boadilla} %\usetheme{default} \useoutertheme{split} @@ -477,7 +477,7 @@ \begin{itemize} \item Writing tests is really simple! - \item Using nose + \item Using nose. \item Example! \end{itemize} @@ -510,7 +510,7 @@ import nose nose.main() \end{lstlisting} -\inctime{15} +\inctime{10} \end{frame} \begin{frame}[fragile] @@ -566,20 +566,38 @@ \end{frame} \begin{frame}[fragile] - \frametitle{Exercise: Some more tests.} + \frametitle{Lets write some test!} \begin{lstlisting} -def test_function_ignore_spaces_in_text(): - input = "ab raca carba" - assert is_palindrome(input) == True +#for form of equation y=mx+c +#given m and c for two equation, +#finding the intersection point. +def intersect(m1,c1,m2,c2): + x = (c2-c1)/(m1-m2) + y = m1*x+c1 + return (x,y) \end{lstlisting} -Check -\PythonCode{$ nosetests test.py} +Create a simple test for this -Tweak the code to pass this test. +function which will make it fail. \inctime{15} \end{frame} +\section{Summary} +\begin{frame}{So we have covered:} + \begin{itemize} + \item Need for vizualization. + \item Tools available. + \item How to follow Test Driven Approach. + \end{itemize} +\end{frame} +\begin{frame} + \begin{center} + \Huge + Thank you! + \end{center} +\end{frame} + \end{document}