--- 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]