day2/session2.tex
changeset 58 ab9192cfe870
parent 46 63704b5650f1
child 66 523f788d2147
--- a/day2/session2.tex	Thu Oct 08 00:09:59 2009 +0530
+++ b/day2/session2.tex	Thu Oct 08 01:30:59 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]