From 6bbafe089e0ba29c38c1c63da59633ab7b6db73e Mon Sep 17 00:00:00 2001
From: Prabhu Ramachandran
Date: Thu, 19 Jan 2017 00:04:28 +0530
Subject: Reorganize files with better names.

Add a little more content to the mlab slides.
---
 scipy/basic/numpy.tex | 550 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 550 insertions(+)
 create mode 100644 scipy/basic/numpy.tex

(limited to 'scipy/basic/numpy.tex')

diff --git a/scipy/basic/numpy.tex b/scipy/basic/numpy.tex
new file mode 100644
index 0000000..6180ea2
--- /dev/null
+++ b/scipy/basic/numpy.tex
@@ -0,0 +1,550 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Tutorial slides on Python.
+%
+% Author: FOSSEE
+% Copyright (c) 2009, FOSSEE, IIT Bombay
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[14pt,compress]{beamer}
+%\documentclass[draft]{beamer}
+%\documentclass[compress,handout]{beamer}
+%\usepackage{pgfpages}
+%\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]
+
+% Modified from: generic-ornate-15min-45min.de.tex
+\mode<presentation>
+{
+  \usetheme{Warsaw}
+  \useoutertheme{infolines}
+  \setbeamercovered{transparent}
+}
+
+\usepackage[english]{babel}
+\usepackage[latin1]{inputenc}
+%\usepackage{times}
+\usepackage[T1]{fontenc}
+
+% Taken from Fernando's slides.
+\usepackage{ae,aecompl}
+\usepackage{mathpazo,courier,euler}
+\usepackage[scaled=.95]{helvet}
+
+\definecolor{darkgreen}{rgb}{0,0.5,0}
+
+\usepackage{listings}
+\lstset{language=Python,
+    basicstyle=\ttfamily\bfseries,
+    commentstyle=\color{red}\itshape,
+  stringstyle=\color{darkgreen},
+  showstringspaces=false,
+  keywordstyle=\color{blue}\bfseries}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Macros
+\setbeamercolor{emphbar}{bg=blue!20, fg=black}
+\newcommand{\emphbar}[1]
+{\begin{beamercolorbox}[rounded=true]{emphbar}
+      {#1}
+ \end{beamercolorbox}
+}
+\newcounter{time}
+\setcounter{time}{0}
+\newcommand{\inctime}[1]{\addtocounter{time}{#1}{\tiny \thetime\ m}}
+
+\newcommand{\typ}[1]{\lstinline{#1}}
+
+\newcommand{\kwrd}[1]{ \texttt{\textbf{\color{blue}{#1}}}  }
+
+\newcommand{\num}{\texttt{numpy}}
+
+%%% This is from Fernando's setup.
+% \usepackage{color}
+% \definecolor{orange}{cmyk}{0,0.4,0.8,0.2}
+% % Use and configure listings package for nicely formatted code
+% \usepackage{listings}
+% \lstset{
+%    language=Python,
+%    basicstyle=\small\ttfamily,
+%    commentstyle=\ttfamily\color{blue},
+%    stringstyle=\ttfamily\color{orange},
+%    showstringspaces=false,
+%    breaklines=true,
+%    postbreak = \space\dots
+% }
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Title page
+\title[Interactive Plotting]{Introductory Scientific Computing with
+Python}
+\subtitle{Numpy arrays}
+
+\author[FOSSEE] {FOSSEE}
+
+\institute[FOSSEE -- IITB] {Department of Aerospace Engineering\\IIT Bombay}
+\date[] {Mumbai, India}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%\pgfdeclareimage[height=0.75cm]{iitmlogo}{iitmlogo}
+%\logo{\pgfuseimage{iitmlogo}}
+
+
+%% Delete this, if you do not want the table of contents to pop up at
+%% the beginning of each subsection:
+\AtBeginSubsection[]
+{
+  \begin{frame}<beamer>
+    \frametitle{Outline}
+    \tableofcontents[currentsection,currentsubsection]
+  \end{frame}
+}
+
+\AtBeginSection[]
+{
+  \begin{frame}<beamer>
+    \frametitle{Outline}
+    \tableofcontents[currentsection,currentsubsection]
+  \end{frame}
+}
+
+% If you wish to uncover everything in a step-wise fashion, uncomment
+% the following command:
+%\beamerdefaultoverlayspecification{<+->}
+
+%\includeonlyframes{current,current1,current2,current3,current4,current5,current6}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DOCUMENT STARTS
+\begin{document}
+
+\begin{frame}
+  \titlepage
+\end{frame}
+
+\begin{frame}
+  \frametitle{Outline}
+  \tableofcontents
+  % You might wish to add the option [pausesections]
+\end{frame}
+
+
+\section{\num\ arrays}
+
+\begin{frame}[fragile]
+  \frametitle{The \num\ module}
+  \begin{itemize}
+  \item Efficient, powerful array type
+  \item Abstracts out standard operations on arrays
+  \item Convenience functions
+  \item \typ{ipython --pylab} imports part of numpy
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Without Pylab}
+\begin{lstlisting}
+In []: from numpy import *
+In []: x = linspace(0, 1)
+\end{lstlisting}
+  Note that we had done this ``import'' earlier!
+\begin{lstlisting}
+# Can also do this:
+In []: import numpy
+In []: x = numpy.linspace(0, 1)
+# or
+In []: import numpy as np
+In []: x = np.linspace(0, 1)
+\end{lstlisting}
+  Note the use of \typ{numpy.linspace}
+\end{frame}
+
+\begin{frame}
+  \frametitle{\num\ arrays}
+  \begin{itemize}
+  \item Fixed size (\typ{arr.size})
+  \item Same type (\typ{arr.dtype})
+  \item Arbitrary dimensionality: \typ{arr.shape}
+  \item \typ{shape}: extent (size) along each dimension
+  \item \typ{arr.itemsize}: number of bytes per element
+  \item \alert{Note:} \typ{shape} can change so long as the \typ{size}
+      is constant
+  \item Indices start from 0
+  \item Negative indices work like lists
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{\num\ arrays}
+\begin{lstlisting}
+In []: a = array([1,2,3,4])
+In []: b = array([2,3,4,5])
+
+In []: print(a[0], a[-1])
+(1, 4)
+
+In []: a[0] = -1
+In []: a[0] = 1
+\end{lstlisting}
+Operations are elementwise
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Simple operations}
+\begin{lstlisting}
+In []: a + b
+Out[]: array([3, 5, 7, 9])
+In []: a*b
+Out[]: array([2, 6, 12, 20])
+In []: a/b
+Out[]: array([0, 0, 0, 0])
+\end{lstlisting}
+  \begin{itemize}
+  \item Operations are \alert{element-wise}
+  \item Types matter
+  \end{itemize}
+  \inctime{10}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Data type matters}
+  Try again with this:
+\begin{lstlisting}
+In []: a = array([1.,2,3,4])
+In []: a/b
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Examples}
+\noindent \typ{pi} and \typ{e} are defined.
+\begin{lstlisting}
+In []: x = linspace(0.0, 10.0, 200)
+In []: x *= 2*pi/10
+# apply functions to array.
+In []: y = sin(x)
+In []: y = cos(x)
+In []: x[0] = -1
+In []: print(x[0], x[-1])
+(-1.0, 10.0)
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+    \frametitle{\typ{size, shape, rank} etc.}
+\vspace*{-8pt}
+\begin{lstlisting}
+In []: x = array([1., 2, 3, 4])
+In []: size(x)
+Out[]: 4
+In []: x.dtype
+dtype('float64')
+In []: x.shape
+Out[] (4,)
+In []: rank(x)
+Out[]: 1
+In []: x.itemsize
+Out[]: 8
+\end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Multi-dimensional arrays}
+\begin{lstlisting}
+In []: a = array([[ 0, 1, 2, 3],
+  ...:            [10,11,12,13]])
+In []: a.shape # (rows, columns)
+Out[]: (2, 4)
+
+In []: a[1,3]
+Out[]: 13
+
+In []: a[1,3] = -1
+In []: a[1] # The second row
+array([10,11,12,-1])
+In []: a[1] = 0 # Entire row to zero.
+\end{lstlisting}
+\inctime{10}
+\end{frame}
+
+\subsection{Slicing arrays}
+
+\begin{frame}[plain,fragile]
+  \frametitle{Slicing arrays}
+  \vspace*{-0.2in}
+\begin{lstlisting}
+In []: a = array([[1,2,3], [4,5,6],
+  ...:            [7,8,9]])
+In []: a[0,1:3]
+\end{lstlisting}
+  \pause
+  \vspace*{-0.1in}
+\begin{lstlisting}
+Out[]: array([2, 3])
+
+In []: a[1:,1:]
+\end{lstlisting}
+  \pause
+  \vspace*{-0.1in}
+\begin{lstlisting}
+Out[]: array([[5, 6],
+                [8, 9]])
+
+In []: a[:,2]
+\end{lstlisting}
+  \pause
+  \vspace*{-0.1in}
+\begin{lstlisting}
+Out[]: array([3, 6, 9])
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[plain,fragile]
+  \frametitle{Slicing arrays ...}
+  \vspace*{-0.2in}
+\begin{lstlisting}
+In []: a = array([[1,2,3], [4,5,6],
+  ...:            [7,8,9]])
+
+In []: a[0::2,0::2] # Striding...
+\end{lstlisting}
+  \pause
+  \vspace*{-0.1in}
+\begin{lstlisting}
+Out[]: array([[1, 3],
+              [7, 9]])
+# Slices refer to the same memory!
+\end{lstlisting}
+\end{frame}
+
+\subsection{Array creation}
+
+\begin{frame}[fragile]
+  \frametitle{Array creation functions}
+  \begin{itemize}
+  \item \typ{array(object)}
+  \item \typ{linspace(start, stop, num=50)}
+  \item \typ{ones(shape)}
+  \item \typ{zeros((d1,...,dn))}
+  \item \typ{empty((d1,...,dn))}
+  \item \typ{identity(n)}
+  \item \typ{ones\_like(x)}, \typ{zeros\_like(x)}, \typ{empty\_like(x)}
+  \end{itemize}
+  May pass an optional \typ{dtype=} keyword argument
+
+  For more dtypes see: \typ{numpy.typeDict}
+
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Creation examples}
+  \vspace*{-0.25in}
+\begin{lstlisting}
+In []: a = array([1,2,3], dtype=float)
+In []: ones_like(a)
+Out[]: array([ 1.,  1.,  1.])
+
+In []: ones( (2, 3) )
+Out[]: array([[ 1.,  1.,  1.],
+              [ 1.,  1.,  1.]])
+
+In []: identity(3)
+Out[]: array([[ 1.,  0.,  0.],
+              [ 0.,  1.,  0.],
+              [ 0.,  0.,  1.]])
+\end{lstlisting}
+  \inctime{15}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Array math}
+  \begin{itemize}
+  \item Basic \alert{elementwise} math (given two arrays \typ{a, b}):
+    \begin{itemize}
+        \item \typ{a + b} $\rightarrow$ \typ{add(a, b)}
+        \item \typ{a - b}, $\rightarrow$ \typ{subtract(a, b)}
+        \item \typ{a * b}, $\rightarrow$ \typ{multiply(a, b)}
+        \item \typ{a / b}, $\rightarrow$ \typ{divide(a, b)}
+        \item \typ{a \% b}, $\rightarrow$ \typ{remainder(a, b)}
+        \item \typ{a ** b}, $\rightarrow$ \typ{power(a, b)}
+    \end{itemize}
+  \item Inplace operators: \typ{a += b}, or \typ{add(a, b,
+      a)}
+    \alert{What happens if \typ{a} is \typ{int} and \typ{b} is \typ{float?}}
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Array math}
+  \begin{itemize}
+  \item Logical operations: \typ{==, !=, <, >}, etc.
+  \item \typ{sin(x), arcsin(x), sinh(x)},
+      \typ{exp(x), sqrt(x)} etc.
+  \item \typ{sum(x, axis=0), product(x, axis=0)}
+  \item \typ{dot(a, b)}
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+    \frametitle{Convenience functions: \typ{loadtxt}}
+  \begin{itemize}
+      \item \typ{loadtxt(file_name)}: loads a text file
+      \item \typ{loadtxt(file_name, unpack=True)}: loads a text file and
+          unpacks columns
+  \end{itemize}
+  \begin{lstlisting}
+In []: x = loadtxt('pendulum.txt')
+In []: x.shape
+Out[]: (90, 2)
+
+In []: x, y = loadtxt('pendulum.txt',
+  ...:                 unpack=True)
+In []: x.shape
+Out[]: (90,)
+  \end{lstlisting}
+
+  \inctime{10}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Advanced}
+  \begin{itemize}
+  \item Only scratched the surface of \num
+  \item \typ{reduce, outer}
+  \item Typecasting
+  \item More functions: \typ{take, choose, where}, \typ{compress,
+      concatenate}
+  \item Array broadcasting and \typ{None}
+  \item Record arrays
+  \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Learn more}
+  \small
+    \begin{itemize}
+        \item \url{https://docs.scipy.org/doc/numpy-dev/user/quickstart.html}
+        \item \url{http://numpy.org}
+    \end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+  \frametitle{Recap}
+  \begin{itemize}
+      \item Basic concepts: creation, access, operations
+      \item 1D, multi-dimensional
+      \item Slicing
+      \item Array creation, dtypes
+      \item Math
+      \item \typ{loadtxt}
+      \end{itemize}
+      \inctime{5}
+\end{frame}
+
+\subsection{Example: plotting data from file}
+
+\begin{frame}[fragile]
+\frametitle{Example: plotting data from file}
+\alert{Data is usually present in a file!} \\
+Lets look at the \typ{pendulum.txt} file.
+\begin{lstlisting}
+In []: cat pendulum.txt
+1.0000e-01 6.9004e-01
+1.1000e-01 6.9497e-01
+1.2000e-01 7.4252e-01
+1.3000e-01 7.5360e-01
+\end{lstlisting}
+\ldots
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Reading \typ{pendulum.txt}}
+\begin{itemize}
+  \item File contains L vs.\ T values
+  \item First Column - L values
+  \item Second Column - T values
+  \item Let us generate a plot from the data file
+\end{itemize}
+\end{frame}
+
+\begin{frame}[fragile]
+    \frametitle{Gotcha and an aside}
+    Ensure you are in the same directory as \typ{pendulum.txt}\\
+    if not, do the following on IPython:
+    \begin{lstlisting}
+In []: %cd directory_containing_file
+# Check if pendulum.txt is there.
+In []: ls
+# Also try
+In []: !ls
+    \end{lstlisting}
+
+    \alert{Note:} \typ{\%cd} is an IPython magic command.  For more information
+    do:
+    \begin{lstlisting}
+In []: ?
+In []: %cd?
+    \end{lstlisting}
+\end{frame}
+
+
+\begin{frame}[fragile]
+  \frametitle{Exercise}
+  \begin{itemize}
+  \item Plot L versus T square with dots
+  \item No line connecting points
+  \end{itemize}
+  \inctime{10}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Solution}
+\begin{lstlisting}
+In []: L, t = loadtxt('pendulum.txt',
+ ....:                unpack=True)
+In []: plot(L, t*t, '.')
+\end{lstlisting}
+or
+\begin{lstlisting}
+In []: x = loadtxt('pendulum.txt')
+In []: L, t = x[:,0], x[:,1]
+In []: plot(L, t*t, '.')
+\end{lstlisting}
+
+\end{frame}
+
+
+\begin{frame}[fragile]
+\begin{figure}
+\includegraphics[width=3.5in]{data/L-Tsq.png}
+\end{figure}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Odds and ends}
+\begin{lstlisting}
+In []: mean(L)
+Out[]: 0.54499999999999993
+
+In []: std(L)
+Out[]: 0.25979158313283879
+\end{lstlisting}
+\end{frame}
+
+\begin{frame}[fragile]
+\frametitle{Summary}
+\begin{itemize}
+\item Introduction to \num\ arrays
+\item Slicing arrays
+\item Multi-dimensional arrays
+\item Array operations
+\item Creating arrays
+\item Loading data from file
+\end{itemize}
+
+\inctime{5}
+\end{frame}
+
+\end{document}
-- 
cgit 

