From 0ad6aaab9cd7f1e4d06cf9c72e6c8c6fd1d42eff Mon Sep 17 00:00:00 2001 From: Marcel Stampfer Date: Mon, 2 Nov 2015 14:31:52 +0000 Subject: [PATCH] added wiki ipython notebook --- Coursera Stanford ML Python wiki.html | 5549 ++++++++++++++++++++++++ Coursera Stanford ML Python wiki.ipynb | 2914 +++++++++++++ ex0.csv | 5 + 3 files changed, 8468 insertions(+) create mode 100644 Coursera Stanford ML Python wiki.html create mode 100644 Coursera Stanford ML Python wiki.ipynb create mode 100644 ex0.csv diff --git a/Coursera Stanford ML Python wiki.html b/Coursera Stanford ML Python wiki.html new file mode 100644 index 0000000..6565455 --- /dev/null +++ b/Coursera Stanford ML Python wiki.html @@ -0,0 +1,5549 @@ + + + +Coursera Stanford ML Python wiki + + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+
+
+
+

Python tutorial

This tutorial loosely follows the topics covered in the Octave tutorial in week 2 of the course

+
+
+
+
+
+
+
+
+

The modules needed to run this tutorial are imported below

+
+
+
+
+
+
In [3]:
+
+
+
import numpy as np
+import scipy.io
+import scipy.misc
+import matplotlib.pyplot as plt
+
+ +
+
+
+ +
+
+
+
+
+
+

Elementary arithmetic operations

Python is capable of working like a calculator with some caveats.
+
+
+
+
+
+
In [75]:
+
+
+
5+6
+
+ +
+
+
+ +
+
+ + +
Out[75]:
+ + +
+
11
+
+ +
+ +
+
+ +
+
+
+
In [76]:
+
+
+
3-2
+
+ +
+
+
+ +
+
+ + +
Out[76]:
+ + +
+
1
+
+ +
+ +
+
+ +
+
+
+
In [77]:
+
+
+
5*8
+
+ +
+
+
+ +
+
+ + +
Out[77]:
+ + +
+
40
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Beware: integer division rounds the result down! You can implicitly convert to a float by adding a '.'
+
+
+
+
+
+
In [78]:
+
+
+
1/2
+
+ +
+
+
+ +
+
+ + +
Out[78]:
+ + +
+
0
+
+ +
+ +
+
+ +
+
+
+
In [2]:
+
+
+
1./2 
+
+ +
+
+
+ +
+
+ + +
Out[2]:
+ + +
+
0.5
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Exponents use the '**' operator
+
+
+
+
+
+
In [80]:
+
+
+
2**6
+
+ +
+
+
+ +
+
+ + +
Out[80]:
+ + +
+
64
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Logical operations

Every object has a boolean value returned from bool(). The following elements are false:
    +
  • None
  • +
  • False
  • +
  • 0
  • +
  • Empty collections: “”, (), [], {}
  • +
+ +
+
+
+
+
+
In [5]:
+
+
+
1 and 0 # AND
+
+ +
+
+
+ +
+
+ + +
Out[5]:
+ + +
+
0
+
+ +
+ +
+
+ +
+
+
+
In [83]:
+
+
+
1 or 0 # OR
+
+ +
+
+
+ +
+
+ + +
Out[83]:
+ + +
+
1
+
+ +
+ +
+
+ +
+
+
+
In [84]:
+
+
+
1 != 0 # XOR
+
+ +
+
+
+ +
+
+ + +
Out[84]:
+ + +
+
True
+
+ +
+ +
+
+ +
+
+
+
In [9]:
+
+
+
bool([]) and True # False
+
+ +
+
+
+ +
+
+ + +
Out[9]:
+ + +
+
False
+
+ +
+ +
+
+ +
+
+
+
In [12]:
+
+
+
a='foo'
+b='bar'
+bool(a) != bool(b)
+
+ +
+
+
+ +
+
+ + +
Out[12]:
+ + +
+
False
+
+ +
+ +
+
+ +
+
+
+
In [13]:
+
+
+
b=None
+bool(a) != bool(b)
+
+ +
+
+
+ +
+
+ + +
Out[13]:
+ + +
+
True
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Python variables and types

Displaying variables

Variables are displayed on the console by typing the variable name
+
+
+
+
+
+
In [87]:
+
+
+
b=3
+b
+
+ +
+
+
+ +
+
+ + +
Out[87]:
+ + +
+
3
+
+ +
+ +
+
+ +
+
+
+
In [16]:
+
+
+
from math import pi
+b=pi
+b
+
+ +
+
+
+ +
+
+ + +
Out[16]:
+ + +
+
3.141592653589793
+
+ +
+ +
+
+ +
+
+
+
+
+
+

floating point numbers are formatted in two ways:

+

The 'old' way (pre-python 2.7):

+ +
+
+
+
+
+
In [29]:
+
+
+
print '%1.4f'%b
+
+ +
+
+
+ +
+
+ + +
+
+
3.1416
+
+
+
+ +
+
+ +
+
+
+
+
+
+
The 'new' way (python 2.7+):
+
+
+
+
+
+
In [31]:
+
+
+
print '{:1.5}'.format(b)
+
+ +
+
+
+ +
+
+ + +
+
+
3.1416
+
+
+
+ +
+
+ +
+
+
+
+
+
+

Numpy basics

Vectors and matrices

+
+
+
+
+
+
In [40]:
+
+
+
a=np.array([[1,2],[3,4],[5,6]]) # 3x2 numpy matrix
+a
+
+ +
+
+
+ +
+
+ + +
Out[40]:
+ + +
+
array([[1, 2],
+       [3, 4],
+       [5, 6]])
+
+ +
+ +
+
+ +
+
+
+
In [38]:
+
+
+
v=[1,2,3]   # ordinary python list
+v
+
+ +
+
+
+ +
+
+ + +
Out[38]:
+ + +
+
[1, 2, 3]
+
+ +
+ +
+
+ +
+
+
+
In [39]:
+
+
+
v=np.array([1,2,3]) # numpy array
+v
+
+ +
+
+
+ +
+
+ + +
Out[39]:
+ + +
+
array([1, 2, 3])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Use np.arange(start, stop, increment) to generate a sequence of floats in a numpy array
+
+
+
+
+
+
In [94]:
+
+
+
v=np.arange(1,2,0.1)
+v
+
+ +
+
+
+ +
+
+ + +
Out[94]:
+ + +
+
array([ 1. ,  1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Use tolist() to convert a numpy array to a python list
+
+
+
+
+
+
In [95]:
+
+
+
v.tolist()
+
+ +
+
+
+ +
+
+ + +
Out[95]:
+ + +
+
[1.0,
+ 1.1,
+ 1.2000000000000002,
+ 1.3000000000000003,
+ 1.4000000000000004,
+ 1.5000000000000004,
+ 1.6000000000000005,
+ 1.7000000000000006,
+ 1.8000000000000007,
+ 1.9000000000000008]
+
+ +
+ +
+
+ +
+
+
+
+
+
+
The range() built-in function generates integer sequences in a list
+
+
+
+
+
+
In [96]:
+
+
+
v=range(1,6)
+v
+
+ +
+
+
+ +
+
+ + +
Out[96]:
+ + +
+
[1, 2, 3, 4, 5]
+
+ +
+ +
+
+ +
+
+
+
+
+
+
numpy's linspace function generates a non-integer sequence with a specific number of elements
+
+
+
+
+
+
In [43]:
+
+
+
v=np.linspace(1,2,11)
+v
+
+ +
+
+
+ +
+
+ + +
Out[43]:
+ + +
+
array([ 1. ,  1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9,  2. ])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Comprehensions

list comprehensions

List comprehensions allow you to create iterative code without using a loop
+
+
+
+
+
+
In [99]:
+
+
+
v=[1,2,3]
+[e**2 for e in v]
+
+ +
+
+
+ +
+
+ + +
Out[99]:
+ + +
+
[1, 4, 9]
+
+ +
+ +
+
+ +
+
+
+
In [100]:
+
+
+
[e**2 for e in v if e%2 !=0]
+
+ +
+
+
+ +
+
+ + +
Out[100]:
+ + +
+
[1, 9]
+
+ +
+ +
+
+ +
+
+
+
In [101]:
+
+
+
[e**2 if e%2 != 0 else -1 for e in v]
+
+ +
+
+
+ +
+
+ + +
Out[101]:
+ + +
+
[1, -1, 9]
+
+ +
+ +
+
+ +
+
+
+
+
+
+

dictionary comprehensions

Dictionary comprehensions allow to generate dictionaries without a loop
+
+
+
+
+
+
In [102]:
+
+
+
d = {'a':1, 'b':2, 'c':3}   
+{v: k for k, v in d.items()}   # swap keys and values
+{1: 'a', 2: 'b', 3: 'c'}
+
+ +
+
+
+ +
+
+ + +
Out[102]:
+ + +
+
{1: 'a', 2: 'b', 3: 'c'}
+
+ +
+ +
+
+ +
+
+
+
+
+
+

set comprehension

Set comrehensions generate sets in a similar way
+
+
+
+
+
+
In [103]:
+
+
+
{x**2 for x in [1, 1, 2]}
+set([1, 4])
+
+ +
+
+
+ +
+
+ + +
Out[103]:
+ + +
+
{1, 4}
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Special matrix functions

+
+
+
+
+
+
In [104]:
+
+
+
ones=np.ones((3,2))
+ones
+
+ +
+
+
+ +
+
+ + +
Out[104]:
+ + +
+
array([[ 1.,  1.],
+       [ 1.,  1.],
+       [ 1.,  1.]])
+
+ +
+ +
+
+ +
+
+
+
In [105]:
+
+
+
3*ones
+
+ +
+
+
+ +
+
+ + +
Out[105]:
+ + +
+
array([[ 3.,  3.],
+       [ 3.,  3.],
+       [ 3.,  3.]])
+
+ +
+ +
+
+ +
+
+
+
In [106]:
+
+
+
np.zeros((3,2))
+
+ +
+
+
+ +
+
+ + +
Out[106]:
+ + +
+
array([[ 0.,  0.],
+       [ 0.,  0.],
+       [ 0.,  0.]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Generate an array of uniform random numbers
+
+
+
+
+
+
In [107]:
+
+
+
np.random.rand(3,2)
+
+ +
+
+
+ +
+
+ + +
Out[107]:
+ + +
+
array([[ 0.62274829,  0.09702351],
+       [ 0.63787983,  0.7836852 ],
+       [ 0.2725037 ,  0.05886131]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Generate an array of normal random numbers
+
+
+
+
+
+
In [108]:
+
+
+
np.random.randn(3,2)
+
+ +
+
+
+ +
+
+ + +
Out[108]:
+ + +
+
array([[ 0.91457171, -2.09292019],
+       [-0.66121188,  1.47599627],
+       [ 0.5300655 , -0.7618794 ]])
+
+ +
+ +
+
+ +
+
+
+
In [44]:
+
+
+
id=np.eye(3)
+id
+
+ +
+
+
+ +
+
+ + +
Out[44]:
+ + +
+
array([[ 1.,  0.,  0.],
+       [ 0.,  1.,  0.],
+       [ 0.,  0.,  1.]])
+
+ +
+ +
+
+ +
+
+
+
In [45]:
+
+
+
3*id
+
+ +
+
+
+ +
+
+ + +
Out[45]:
+ + +
+
array([[ 3.,  0.,  0.],
+       [ 0.,  3.,  0.],
+       [ 0.,  0.,  3.]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Moving data around

shape and size of a matrix

+
+
+
+
+
+
In [50]:
+
+
+
a=np.random.rand(3,2)
+a
+
+ +
+
+
+ +
+
+ + +
Out[50]:
+ + +
+
array([[ 0.71577494,  0.51011023],
+       [ 0.60835921,  0.34374784],
+       [ 0.92554381,  0.85963944]])
+
+ +
+ +
+
+ +
+
+
+
In [51]:
+
+
+
a.shape
+
+ +
+
+
+ +
+
+ + +
Out[51]:
+ + +
+
(3, 2)
+
+ +
+ +
+
+ +
+
+
+
In [111]:
+
+
+
a.size
+
+ +
+
+
+ +
+
+ + +
Out[111]:
+ + +
+
6
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Loading files in python

+
+
+
+
+
+
+
+
+
Reading the contents of a simple text file
+
+
+
+
+
+
In [1]:
+
+
+
file=open('ex6/emailSample1.txt', 'r')
+file_contents=file.read()
+file_contents
+
+ +
+
+
+ +
+
+ + +
Out[1]:
+ + +
+
"> Anyone knows how much it costs to host a web portal ?\n>\nWell, it depends on how many visitors you're expecting.\nThis can be anywhere from less than 10 bucks a month to a couple of $100. \nYou should checkout http://www.rackspace.com/ or perhaps Amazon EC2 \nif youre running something big..\n\nTo unsubscribe yourself from this mailing list, send an email to:\ngroupname-unsubscribe@egroups.com\n\n"
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Loading image files
+
+
+
+
+
+
In [4]:
+
+
+
%pylab inline    # this line works in ipython only
+data = scipy.misc.imread('ex7/bird_small.png')
+plt.imshow(data)
+
+ +
+
+
+ +
+
+ + +
+
+
Populating the interactive namespace from numpy and matplotlib
+
+
+
+ +
Out[4]:
+ + +
+
<matplotlib.image.AxesImage at 0x104fa6690>
+
+ +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+
Loading the contents of a csv file
+
+
+
+
+
+
In [6]:
+
+
+
data = np.loadtxt('ex0.csv', delimiter=',')
+data
+
+ +
+
+
+ +
+
+ + +
Out[6]:
+ + +
+
array([[  6.1101,  17.592 ],
+       [  5.5277,   9.1302],
+       [  8.5186,  13.662 ],
+       [  7.0032,  11.854 ],
+       [  5.8598,   6.8233]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Loading a Matlab formatted file
+
+
+
+
+
+
In [7]:
+
+
+
data = scipy.io.loadmat('ex3/ex3data1.mat')
+data
+
+ +
+
+
+ +
+
+ + +
Out[7]:
+ + +
+
{'X': array([[ 0.,  0.,  0., ...,  0.,  0.,  0.],
+        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
+        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
+        ..., 
+        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
+        [ 0.,  0.,  0., ...,  0.,  0.,  0.],
+        [ 0.,  0.,  0., ...,  0.,  0.,  0.]]),
+ '__globals__': [],
+ '__header__': 'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Sun Oct 16 13:09:09 2011',
+ '__version__': '1.0',
+ 'y': array([[10],
+        [10],
+        [10],
+        ..., 
+        [ 9],
+        [ 9],
+        [ 9]], dtype=uint8)}
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Manipulating matrices

Indexing and Slicing

+
+
+
+
+
+
+
+
+

a[start:end] - items start through end-1

a[start:] - items start through the rest of the array

a[:end] - items from the beginning through end-1

a[:] - a copy of the whole array

There is also the step value, which can be used with any of the above:

a[start:end:step] - start through not past end, by step

+
+
+
+
+
+
In [16]:
+
+
+
x = np.arange(10)
+x
+
+ +
+
+
+ +
+
+ + +
Out[16]:
+ + +
+
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+
+ +
+ +
+
+ +
+
+
+
In [119]:
+
+
+
x[:]
+
+ +
+
+
+ +
+
+ + +
Out[119]:
+ + +
+
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+
+ +
+ +
+
+ +
+
+
+
In [120]:
+
+
+
x[1:]
+
+ +
+
+
+ +
+
+ + +
Out[120]:
+ + +
+
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
+
+ +
+ +
+
+ +
+
+
+
In [121]:
+
+
+
x[:5]
+
+ +
+
+
+ +
+
+ + +
Out[121]:
+ + +
+
array([0, 1, 2, 3, 4])
+
+ +
+ +
+
+ +
+
+
+
In [122]:
+
+
+
x[2]
+
+ +
+
+
+ +
+
+ + +
Out[122]:
+ + +
+
2
+
+ +
+ +
+
+ +
+
+
+
In [18]:
+
+
+
x[1:7:2]
+
+ +
+
+
+ +
+
+ + +
Out[18]:
+ + +
+
array([1, 3, 5])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Negative indices

a[-1] - last item in the array
a[-2:] - last two items in the array
a[:-2] - everything except the last two items
+
+
+
+
+
+
In [17]:
+
+
+
x[:-2]
+
+ +
+
+
+ +
+
+ + +
Out[17]:
+ + +
+
array([0, 1, 2, 3, 4, 5, 6, 7])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
2d matrices are accessed in the row, column order
+
+
+
+
+
+
In [20]:
+
+
+
arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
+arr2d
+
+ +
+
+
+ +
+
+ + +
Out[20]:
+ + +
+
array([[1, 2, 3],
+       [4, 5, 6],
+       [7, 8, 9]])
+
+ +
+ +
+
+ +
+
+
+
In [21]:
+
+
+
arr2d[2]
+
+ +
+
+
+ +
+
+ + +
Out[21]:
+ + +
+
array([7, 8, 9])
+
+ +
+ +
+
+ +
+
+
+
In [22]:
+
+
+
arr2d[0]
+
+ +
+
+
+ +
+
+ + +
Out[22]:
+ + +
+
array([1, 2, 3])
+
+ +
+ +
+
+ +
+
+
+
In [132]:
+
+
+
arr2d[0,1]
+
+ +
+
+
+ +
+
+ + +
Out[132]:
+ + +
+
2
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Boolean indexing

Index selection can be done by filtering elements with boolean values

+
+
+
+
+
+
In [133]:
+
+
+
mat = np.array(['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']).reshape((3,3))
+mat
+
+ +
+
+
+ +
+
+ + +
Out[133]:
+ + +
+
array([['The', 'quick', 'brown'],
+       ['fox', 'jumped', 'over'],
+       ['the', 'lazy', 'dog']], 
+      dtype='|S6')
+
+ +
+ +
+
+ +
+
+
+
In [134]:
+
+
+
rand = np.random.randn(3,3)>0
+rand
+
+ +
+
+
+ +
+
+ + +
Out[134]:
+ + +
+
array([[False, False,  True],
+       [ True,  True,  True],
+       [ True, False, False]], dtype=bool)
+
+ +
+ +
+
+ +
+
+
+
In [135]:
+
+
+
mat[rand]
+
+ +
+
+
+ +
+
+ + +
Out[135]:
+ + +
+
array(['brown', 'fox', 'jumped', 'over', 'the'], 
+      dtype='|S6')
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Flattening

Reshaping from a higher dimensional to one dimensional order is called flattening

+
+
+
+
+
+
In [24]:
+
+
+
arr = np.arange(9).reshape((3,3))
+arr
+
+ +
+
+
+ +
+
+ + +
Out[24]:
+ + +
+
array([[0, 1, 2],
+       [3, 4, 5],
+       [6, 7, 8]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
The flatten() function returns a copy of the array
+
+
+
+
+
+
In [25]:
+
+
+
arr.flatten()
+
+ +
+
+
+ +
+
+ + +
Out[25]:
+ + +
+
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
flattening can be done columnwise
+
+
+
+
+
+
In [29]:
+
+
+
arr.flatten(1)
+
+ +
+
+
+ +
+
+ + +
Out[29]:
+ + +
+
array([0, 3, 6, 1, 4, 7, 2, 5, 8])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
the ravel() function doesn't return a copy of the underlying data
+
+
+
+
+
+
In [27]:
+
+
+
arr.ravel()
+
+ +
+
+
+ +
+
+ + +
Out[27]:
+ + +
+
array([0, 3, 6, 1, 4, 7, 2, 5, 8])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Vector assignments

Python doesn't create copies of underlying data on assignment statements

+
+
+
+
+
+
In [31]:
+
+
+
arr = np.arange(10)
+arr
+
+ +
+
+
+ +
+
+ + +
Out[31]:
+ + +
+
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
create a reference to some elements in the array and reassign them
+
+
+
+
+
+
In [32]:
+
+
+
slice=arr[4:8]
+slice
+
+ +
+
+
+ +
+
+ + +
Out[32]:
+ + +
+
array([4, 5, 6, 7])
+
+ +
+ +
+
+ +
+
+
+
In [33]:
+
+
+
slice[:]=-5
+slice
+
+ +
+
+
+ +
+
+ + +
Out[33]:
+ + +
+
array([-5, -5, -5, -5])
+
+ +
+ +
+
+ +
+
+
+
In [34]:
+
+
+
slice[1]=50
+slice
+
+ +
+
+
+ +
+
+ + +
Out[34]:
+ + +
+
array([-5, 50, -5, -5])
+
+ +
+ +
+
+ +
+
+
+
In [35]:
+
+
+
arr
+
+ +
+
+
+ +
+
+ + +
Out[35]:
+ + +
+
array([ 0,  1,  2,  3, -5, 50, -5, -5,  8,  9])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
now create a copy of the array explicitly and reassign
+
+
+
+
+
+
In [145]:
+
+
+
arr_copy=arr.copy()
+arr_copy
+
+ +
+
+
+ +
+
+ + +
Out[145]:
+ + +
+
array([ 0,  1,  2,  3, -5, 50, -5, -5,  8,  9])
+
+ +
+ +
+
+ +
+
+
+
In [146]:
+
+
+
arr_copy[4:8]=20
+arr_copy
+
+ +
+
+
+ +
+
+ + +
Out[146]:
+ + +
+
array([ 0,  1,  2,  3, 20, 20, 20, 20,  8,  9])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
The original array is unchanged
+
+
+
+
+
+
In [147]:
+
+
+
arr
+
+ +
+
+
+ +
+
+ + +
Out[147]:
+ + +
+
array([ 0,  1,  2,  3, -5, 50, -5, -5,  8,  9])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Horizontal and vertical concatenation

There are two ways to concatenate

+
+
+
+
+
+
In [148]:
+
+
+
mat = np.array(['The', 'quick', 'brown', 'fox'])
+mat2 = np.array(['jumped', 'over', 'the', 'lazy'])
+
+ +
+
+
+ +
+
+
+
+
+
+
Method 1: Use stacking
+
+
+
+
+
+
In [149]:
+
+
+
 np.hstack((mat,mat2))
+
+ +
+
+
+ +
+
+ + +
Out[149]:
+ + +
+
array(['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy'], 
+      dtype='|S6')
+
+ +
+ +
+
+ +
+
+
+
In [150]:
+
+
+
 np.vstack((mat,mat2))
+
+ +
+
+
+ +
+
+ + +
Out[150]:
+ + +
+
array([['The', 'quick', 'brown', 'fox'],
+       ['jumped', 'over', 'the', 'lazy']], 
+      dtype='|S6')
+
+ +
+ +
+
+ +
+
+
+
In [151]:
+
+
+
 np.column_stack((mat,mat2))
+
+ +
+
+
+ +
+
+ + +
Out[151]:
+ + +
+
array([['The', 'jumped'],
+       ['quick', 'over'],
+       ['brown', 'the'],
+       ['fox', 'lazy']], 
+      dtype='|S6')
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Method 2: Use the concatenate() function applied to an axis
+
+
+
+
+
+
In [152]:
+
+
+
arr = np.arange(12).reshape((3, 4))
+arr
+
+ +
+
+
+ +
+
+ + +
Out[152]:
+ + +
+
array([[ 0,  1,  2,  3],
+       [ 4,  5,  6,  7],
+       [ 8,  9, 10, 11]])
+
+ +
+ +
+
+ +
+
+
+
In [153]:
+
+
+
np.concatenate((arr,arr), axis=1)
+
+ +
+
+
+ +
+
+ + +
Out[153]:
+ + +
+
array([[ 0,  1,  2,  3,  0,  1,  2,  3],
+       [ 4,  5,  6,  7,  4,  5,  6,  7],
+       [ 8,  9, 10, 11,  8,  9, 10, 11]])
+
+ +
+ +
+
+ +
+
+
+
In [154]:
+
+
+
np.concatenate((arr,arr), axis=0)
+
+ +
+
+
+ +
+
+ + +
Out[154]:
+ + +
+
array([[ 0,  1,  2,  3],
+       [ 4,  5,  6,  7],
+       [ 8,  9, 10, 11],
+       [ 0,  1,  2,  3],
+       [ 4,  5,  6,  7],
+       [ 8,  9, 10, 11]])
+
+ +
+ +
+
+ +
+
+
+
In [155]:
+
+
+
arr = np.arange(5)
+np.concatenate((arr,arr), axis=0)
+
+ +
+
+
+ +
+
+ + +
Out[155]:
+ + +
+
array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Matrix multiplication

+
+
+
+
+
+
In [156]:
+
+
+
x=np.array([[1,2,3], [4,5,6], [7,8,9]])
+y=np.array([[1,2,3], [4,5,6], [7,8,9]])
+np.dot(x,y)
+
+ +
+
+
+ +
+
+ + +
Out[156]:
+ + +
+
array([[ 30,  36,  42],
+       [ 66,  81,  96],
+       [102, 126, 150]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Matrix multiplication is done using the dot() function
+
+
+
+
+
+
In [157]:
+
+
+
x.dot(y)
+
+ +
+
+
+ +
+
+ + +
Out[157]:
+ + +
+
array([[ 30,  36,  42],
+       [ 66,  81,  96],
+       [102, 126, 150]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Element-wise multiplication using the '*' operator
+
+
+
+
+
+
In [159]:
+
+
+
x*y
+
+ +
+
+
+ +
+
+ + +
Out[159]:
+ + +
+
array([[ 1,  4,  9],
+       [16, 25, 36],
+       [49, 64, 81]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Element-wise squaring
+
+
+
+
+
+
In [38]:
+
+
+
x**2
+
+ +
+
+
+ +
+
+ + +
Out[38]:
+ + +
+
array([ 0,  1,  4,  9, 16, 25, 36, 49, 64, 81])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Element-wise reciprical
+
+
+
+
+
+
In [161]:
+
+
+
1./x
+
+ +
+
+
+ +
+
+ + +
Out[161]:
+ + +
+
array([[ 1.        ,  0.5       ,  0.33333333],
+       [ 0.25      ,  0.2       ,  0.16666667],
+       [ 0.14285714,  0.125     ,  0.11111111]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Element-wise logarithms/exponents
+
+
+
+
+
+
In [162]:
+
+
+
np.log(x)
+
+ +
+
+
+ +
+
+ + +
Out[162]:
+ + +
+
array([[ 0.        ,  0.69314718,  1.09861229],
+       [ 1.38629436,  1.60943791,  1.79175947],
+       [ 1.94591015,  2.07944154,  2.19722458]])
+
+ +
+ +
+
+ +
+
+
+
In [163]:
+
+
+
np.exp(x)
+
+ +
+
+
+ +
+
+ + +
Out[163]:
+ + +
+
array([[  2.71828183e+00,   7.38905610e+00,   2.00855369e+01],
+       [  5.45981500e+01,   1.48413159e+02,   4.03428793e+02],
+       [  1.09663316e+03,   2.98095799e+03,   8.10308393e+03]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+
Element-wise addition
+
+
+
+
+
+
In [165]:
+
+
+
1+x
+
+ +
+
+
+ +
+
+ + +
Out[165]:
+ + +
+
array([[ 2,  3,  4],
+       [ 5,  6,  7],
+       [ 8,  9, 10]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Transpose of a matrix

+
+
+
+
+
+
In [167]:
+
+
+
x.T
+
+ +
+
+
+ +
+
+ + +
Out[167]:
+ + +
+
array([[1, 4, 7],
+       [2, 5, 8],
+       [3, 6, 9]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Maximum and minimum of matrix values

+
+
+
+
+
+
In [170]:
+
+
+
np.max(x)
+
+ +
+
+
+ +
+
+ + +
Out[170]:
+ + +
+
9
+
+ +
+ +
+
+ +
+
+
+
In [171]:
+
+
+
np.min(x)
+
+ +
+
+
+ +
+
+ + +
Out[171]:
+ + +
+
1
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Sum and product of all elements

+
+
+
+
+
+
In [173]:
+
+
+
np.sum(x)
+
+ +
+
+
+ +
+
+ + +
Out[173]:
+ + +
+
45
+
+ +
+ +
+
+ +
+
+
+
In [174]:
+
+
+
np.sum(x,axis=0)
+
+ +
+
+
+ +
+
+ + +
Out[174]:
+ + +
+
array([12, 15, 18])
+
+ +
+ +
+
+ +
+
+
+
In [175]:
+
+
+
np.sum(x,axis=1)
+
+ +
+
+
+ +
+
+ + +
Out[175]:
+ + +
+
array([ 6, 15, 24])
+
+ +
+ +
+
+ +
+
+
+
In [176]:
+
+
+
np.sum(x)
+
+ +
+
+
+ +
+
+ + +
Out[176]:
+ + +
+
45
+
+ +
+ +
+
+ +
+
+
+
In [177]:
+
+
+
np.product(x)
+
+ +
+
+
+ +
+
+ + +
Out[177]:
+ + +
+
362880
+
+ +
+ +
+
+ +
+
+
+
In [178]:
+
+
+
np.product(x,axis=0)
+
+ +
+
+
+ +
+
+ + +
Out[178]:
+ + +
+
array([ 28,  80, 162])
+
+ +
+ +
+
+ +
+
+
+
In [179]:
+
+
+
np.product(x,axis=1)
+
+ +
+
+
+ +
+
+ + +
Out[179]:
+ + +
+
array([  6, 120, 504])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Inverse and pseudo-inverse of a matrix

+
+
+
+
+
+
In [181]:
+
+
+
x=2*np.eye(3)
+np.linalg.inv(x)
+
+ +
+
+
+ +
+
+ + +
Out[181]:
+ + +
+
array([[ 0.5,  0. ,  0. ],
+       [ 0. ,  0.5,  0. ],
+       [ 0. ,  0. ,  0.5]])
+
+ +
+ +
+
+ +
+
+
+
In [182]:
+
+
+
np.linalg.pinv(x)
+
+ +
+
+
+ +
+
+ + +
Out[182]:
+ + +
+
array([[ 0.5,  0. ,  0. ],
+       [ 0. ,  0.5,  0. ],
+       [ 0. ,  0. ,  0.5]])
+
+ +
+ +
+
+ +
+
+
+
+
+
+

Plotting data

Plotting generated data

+
+
+
+
+
+
In [183]:
+
+
+
plt.plot(np.arange(10))
+
+ +
+
+
+ +
+
+ + +
Out[183]:
+ + +
+
[<matplotlib.lines.Line2D at 0x10dd05f50>]
+
+ +
+ +
+ + +
+ +
+ +
+ +
+
+ +
+
+
+
+
+
+

Line color, labels, title and legend

Saving a graph

Subplots

Axis scaling

Creating/clearing figures

+
+
+
+
+
+
+
+
+

Control statements

For loops

+
+
+
+
+
+
In [184]:
+
+
+
li = ['a', 'b', 'e']
+for e in li:
+    print e
+
+ +
+
+
+ +
+
+ + +
+
+
a
+b
+e
+
+
+
+ +
+
+ +
+
+
+
In [185]:
+
+
+
d = enumerate(li)
+for k,v in d:
+    print k,v
+
+ +
+
+
+ +
+
+ + +
+
+
0 a
+1 b
+2 e
+
+
+
+ +
+
+ +
+
+
+
+
+
+

While loops

+
+
+
+
+
+
In [186]:
+
+
+
n = ''
+while n.strip() != 'hello':
+    n = raw_input("Please enter 'hello':")
+
+ +
+
+
+ +
+
+ + +
+
+
Please enter 'hello':goodbye
+Please enter 'hello':hello
+
+
+
+ +
+
+ +
+
+
+
+
+
+

break statement

+
+
+
+
+
+
In [188]:
+
+
+
while True:
+    n = raw_input("Please enter 'hello':")
+    if n.strip() == 'hello':
+        break
+
+ +
+
+
+ +
+
+ + +
+
+
Please enter 'hello':bye
+Please enter 'hello':hello
+
+
+
+ +
+
+ +
+
+
+
+
+
+

if-elif-else statement

+
+
+
+
+
+
In [189]:
+
+
+
x = int(raw_input("Please enter an integer: "))
+
+if x < 0:
+    x = 0
+    print 'Negative changed to zero'
+elif x == 0:
+    print 'Zero'
+elif x == 1:
+    print 'Single'
+else:
+    print 'More'
+
+ +
+
+
+ +
+
+ + +
+
+
Please enter an integer: 42
+More
+
+
+
+ +
+
+ +
+
+
+
+
+
+

Functions

PYTHONPATH environment variable

Vectorization

Vectorized implementation

Unvectorized implementation

+
+
+
+
+
+ + diff --git a/Coursera Stanford ML Python wiki.ipynb b/Coursera Stanford ML Python wiki.ipynb new file mode 100644 index 0000000..2517f1c --- /dev/null +++ b/Coursera Stanford ML Python wiki.ipynb @@ -0,0 +1,2914 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Python tutorial\n", + "\n", + "### This tutorial loosely follows the topics covered in the Octave tutorial in week 2 of the course" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### The modules needed to run this tutorial are imported below" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import scipy.io\n", + "import scipy.misc\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Elementary arithmetic operations\n", + "##### Python is capable of working like a calculator with some caveats." + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "11" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "5+6" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "3-2" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "40" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "5*8" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Beware: integer division rounds the result down! You can implicitly convert to a float by adding a '.'" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1/2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0.5" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1./2 " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Exponents use the '**' operator" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "64" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "2**6" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Logical operations\n", + "##### Every object has a boolean value returned from bool(). The following elements are false:\n", + "\n", + "* None\n", + "* False\n", + "* 0\n", + "* Empty collections: “”, (), [], {}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 and 0 # AND" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 83, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 or 0 # OR" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1 != 0 # XOR" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bool([]) and True # False" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "False" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a='foo'\n", + "b='bar'\n", + "bool(a) != bool(b)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b=None\n", + "bool(a) != bool(b)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Python variables and types\n", + "### Displaying variables\n", + "##### Variables are displayed on the console by typing the variable name" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3" + ] + }, + "execution_count": 87, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b=3\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "3.141592653589793" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from math import pi\n", + "b=pi\n", + "b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "floating point numbers are formatted in two ways:\n", + "\n", + "The 'old' way (pre-python 2.7):" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.1416\n" + ] + } + ], + "source": [ + "print '%1.4f'%b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### The 'new' way (python 2.7+):" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "3.1416\n" + ] + } + ], + "source": [ + "print '{:1.5}'.format(b)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Numpy basics \n", + "### Vectors and matrices" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 2],\n", + " [3, 4],\n", + " [5, 6]])" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a=np.array([[1,2],[3,4],[5,6]]) # 3x2 numpy matrix\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3]" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v=[1,2,3] # ordinary python list\n", + "v" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3])" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v=np.array([1,2,3]) # numpy array\n", + "v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Use `np.arange(start, stop, increment)` to generate a sequence of floats in a numpy array" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9])" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v=np.arange(1,2,0.1)\n", + "v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Use `tolist()` to convert a numpy array to a python list" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[1.0,\n", + " 1.1,\n", + " 1.2000000000000002,\n", + " 1.3000000000000003,\n", + " 1.4000000000000004,\n", + " 1.5000000000000004,\n", + " 1.6000000000000005,\n", + " 1.7000000000000006,\n", + " 1.8000000000000007,\n", + " 1.9000000000000008]" + ] + }, + "execution_count": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v.tolist()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### The `range()` built-in function generates integer sequences in a `list`" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 2, 3, 4, 5]" + ] + }, + "execution_count": 96, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v=range(1,6)\n", + "v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### numpy's `linspace` function generates a non-integer sequence with a specific number of elements" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 1. , 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2. ])" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v=np.linspace(1,2,11)\n", + "v" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Comprehensions\n", + "### list comprehensions\n", + "##### List comprehensions allow you to create iterative code without using a loop" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 4, 9]" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "v=[1,2,3]\n", + "[e**2 for e in v]" + ] + }, + { + "cell_type": "code", + "execution_count": 100, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, 9]" + ] + }, + "execution_count": 100, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[e**2 for e in v if e%2 !=0]" + ] + }, + { + "cell_type": "code", + "execution_count": 101, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[1, -1, 9]" + ] + }, + "execution_count": 101, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[e**2 if e%2 != 0 else -1 for e in v]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### dictionary comprehensions\n", + "##### Dictionary comprehensions allow to generate dictionaries without a loop" + ] + }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: 'a', 2: 'b', 3: 'c'}" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d = {'a':1, 'b':2, 'c':3} \n", + "{v: k for k, v in d.items()} # swap keys and values\n", + "{1: 'a', 2: 'b', 3: 'c'}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### set comprehension\n", + "\n", + "##### Set comrehensions generate sets in a similar way" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{1, 4}" + ] + }, + "execution_count": 103, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "{x**2 for x in [1, 1, 2]}\n", + "set([1, 4])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Special matrix functions" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1., 1.],\n", + " [ 1., 1.],\n", + " [ 1., 1.]])" + ] + }, + "execution_count": 104, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ones=np.ones((3,2))\n", + "ones" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 3., 3.],\n", + " [ 3., 3.],\n", + " [ 3., 3.]])" + ] + }, + "execution_count": 105, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "3*ones\n" + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0., 0.],\n", + " [ 0., 0.],\n", + " [ 0., 0.]])" + ] + }, + "execution_count": 106, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.zeros((3,2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Generate an array of uniform random numbers" + ] + }, + { + "cell_type": "code", + "execution_count": 107, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.62274829, 0.09702351],\n", + " [ 0.63787983, 0.7836852 ],\n", + " [ 0.2725037 , 0.05886131]])" + ] + }, + "execution_count": 107, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.rand(3,2)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Generate an array of normal random numbers" + ] + }, + { + "cell_type": "code", + "execution_count": 108, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.91457171, -2.09292019],\n", + " [-0.66121188, 1.47599627],\n", + " [ 0.5300655 , -0.7618794 ]])" + ] + }, + "execution_count": 108, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.randn(3,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1., 0., 0.],\n", + " [ 0., 1., 0.],\n", + " [ 0., 0., 1.]])" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "id=np.eye(3)\n", + "id" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 3., 0., 0.],\n", + " [ 0., 3., 0.],\n", + " [ 0., 0., 3.]])" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "3*id" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Moving data around\n", + "### shape and size of a matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.71577494, 0.51011023],\n", + " [ 0.60835921, 0.34374784],\n", + " [ 0.92554381, 0.85963944]])" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a=np.random.rand(3,2)\n", + "a" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(3, 2)" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 111, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "6" + ] + }, + "execution_count": 111, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a.size" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "## Loading files in python" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Reading the contents of a simple text file" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "\"> Anyone knows how much it costs to host a web portal ?\\n>\\nWell, it depends on how many visitors you're expecting.\\nThis can be anywhere from less than 10 bucks a month to a couple of $100. \\nYou should checkout http://www.rackspace.com/ or perhaps Amazon EC2 \\nif youre running something big..\\n\\nTo unsubscribe yourself from this mailing list, send an email to:\\ngroupname-unsubscribe@egroups.com\\n\\n\"" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "file=open('ex6/emailSample1.txt', 'r')\n", + "file_contents=file.read()\n", + "file_contents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Loading image files" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Populating the interactive namespace from numpy and matplotlib\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "%pylab inline # this line works in ipython only\n", + "data = scipy.misc.imread('ex7/bird_small.png')\n", + "plt.imshow(data)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Loading the contents of a csv file" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 6.1101, 17.592 ],\n", + " [ 5.5277, 9.1302],\n", + " [ 8.5186, 13.662 ],\n", + " [ 7.0032, 11.854 ],\n", + " [ 5.8598, 6.8233]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = np.loadtxt('ex0.csv', delimiter=',')\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Loading a Matlab formatted file" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'X': array([[ 0., 0., 0., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " ..., \n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.],\n", + " [ 0., 0., 0., ..., 0., 0., 0.]]),\n", + " '__globals__': [],\n", + " '__header__': 'MATLAB 5.0 MAT-file, Platform: GLNXA64, Created on: Sun Oct 16 13:09:09 2011',\n", + " '__version__': '1.0',\n", + " 'y': array([[10],\n", + " [10],\n", + " [10],\n", + " ..., \n", + " [ 9],\n", + " [ 9],\n", + " [ 9]], dtype=uint8)}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = scipy.io.loadmat('ex3/ex3data1.mat')\n", + "data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Manipulating matrices\n", + "### Indexing and Slicing" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### `a[start:end]` - items start through end-1\n", + "#### `a[start:]` - items start through the rest of the array\n", + "#### `a[:end]` - items from the beginning through end-1\n", + "#### `a[:]` - a copy of the whole array\n", + "##### There is also the step value, which can be used with any of the above:\n", + "#### `a[start:end:step]` - start through not past end, by step" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = np.arange(10)\n", + "x" + ] + }, + { + "cell_type": "code", + "execution_count": 119, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 119, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[:]" + ] + }, + { + "cell_type": "code", + "execution_count": 120, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 120, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[1:]" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4])" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 122, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 122, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 3, 5])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[1:7:2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Negative indices\n", + "##### `a[-1]` - last item in the array\n", + "##### `a[-2:]` - last two items in the array\n", + "##### `a[:-2]` - everything except the last two items" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7])" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[:-2]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### 2d matrices are accessed in the row, column order" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 2, 3],\n", + " [4, 5, 6],\n", + " [7, 8, 9]])" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])\n", + "arr2d" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([7, 8, 9])" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([1, 2, 3])" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr2d[0,1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Boolean indexing\n", + "\n", + "#### Index selection can be done by filtering elements with boolean values" + ] + }, + { + "cell_type": "code", + "execution_count": 133, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([['The', 'quick', 'brown'],\n", + " ['fox', 'jumped', 'over'],\n", + " ['the', 'lazy', 'dog']], \n", + " dtype='|S6')" + ] + }, + "execution_count": 133, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mat = np.array(['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy', 'dog']).reshape((3,3))\n", + "mat" + ] + }, + { + "cell_type": "code", + "execution_count": 134, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[False, False, True],\n", + " [ True, True, True],\n", + " [ True, False, False]], dtype=bool)" + ] + }, + "execution_count": 134, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rand = np.random.randn(3,3)>0\n", + "rand" + ] + }, + { + "cell_type": "code", + "execution_count": 135, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['brown', 'fox', 'jumped', 'over', 'the'], \n", + " dtype='|S6')" + ] + }, + "execution_count": 135, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "mat[rand]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Flattening\n", + "\n", + "### Reshaping from a higher dimensional to one dimensional order is called flattening" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[0, 1, 2],\n", + " [3, 4, 5],\n", + " [6, 7, 8]])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = np.arange(9).reshape((3,3))\n", + "arr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### The `flatten()` function returns a copy of the array" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8])" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.flatten()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### flattening can be done columnwise" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 3, 6, 1, 4, 7, 2, 5, 8])" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.flatten(1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### the `ravel()` function doesn't return a copy of the underlying data" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 3, 6, 1, 4, 7, 2, 5, 8])" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr.ravel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Vector assignments\n", + "\n", + "### Python doesn't create copies of underlying data on assignment statements" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = np.arange(10)\n", + "arr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### create a reference to some elements in the array and reassign them" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([4, 5, 6, 7])" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slice=arr[4:8]\n", + "slice" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-5, -5, -5, -5])" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slice[:]=-5\n", + "slice" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([-5, 50, -5, -5])" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "slice[1]=50\n", + "slice" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, -5, 50, -5, -5, 8, 9])" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "###### now create a copy of the array explicitly and reassign" + ] + }, + { + "cell_type": "code", + "execution_count": 145, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, -5, 50, -5, -5, 8, 9])" + ] + }, + "execution_count": 145, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr_copy=arr.copy()\n", + "arr_copy" + ] + }, + { + "cell_type": "code", + "execution_count": 146, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, 20, 20, 20, 20, 8, 9])" + ] + }, + "execution_count": 146, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr_copy[4:8]=20\n", + "arr_copy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### The original array is unchanged" + ] + }, + { + "cell_type": "code", + "execution_count": 147, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 2, 3, -5, 50, -5, -5, 8, 9])" + ] + }, + "execution_count": 147, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Horizontal and vertical concatenation\n", + "### There are two ways to concatenate" + ] + }, + { + "cell_type": "code", + "execution_count": 148, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "mat = np.array(['The', 'quick', 'brown', 'fox'])\n", + "mat2 = np.array(['jumped', 'over', 'the', 'lazy'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Method 1: Use stacking" + ] + }, + { + "cell_type": "code", + "execution_count": 149, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array(['The', 'quick', 'brown', 'fox', 'jumped', 'over', 'the', 'lazy'], \n", + " dtype='|S6')" + ] + }, + "execution_count": 149, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " np.hstack((mat,mat2))" + ] + }, + { + "cell_type": "code", + "execution_count": 150, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([['The', 'quick', 'brown', 'fox'],\n", + " ['jumped', 'over', 'the', 'lazy']], \n", + " dtype='|S6')" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " np.vstack((mat,mat2))" + ] + }, + { + "cell_type": "code", + "execution_count": 151, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([['The', 'jumped'],\n", + " ['quick', 'over'],\n", + " ['brown', 'the'],\n", + " ['fox', 'lazy']], \n", + " dtype='|S6')" + ] + }, + "execution_count": 151, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " np.column_stack((mat,mat2))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Method 2: Use the `concatenate()` function applied to an axis" + ] + }, + { + "cell_type": "code", + "execution_count": 152, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3],\n", + " [ 4, 5, 6, 7],\n", + " [ 8, 9, 10, 11]])" + ] + }, + "execution_count": 152, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = np.arange(12).reshape((3, 4))\n", + "arr" + ] + }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3, 0, 1, 2, 3],\n", + " [ 4, 5, 6, 7, 4, 5, 6, 7],\n", + " [ 8, 9, 10, 11, 8, 9, 10, 11]])" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.concatenate((arr,arr), axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 154, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0, 1, 2, 3],\n", + " [ 4, 5, 6, 7],\n", + " [ 8, 9, 10, 11],\n", + " [ 0, 1, 2, 3],\n", + " [ 4, 5, 6, 7],\n", + " [ 8, 9, 10, 11]])" + ] + }, + "execution_count": 154, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.concatenate((arr,arr), axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 155, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0, 1, 2, 3, 4, 0, 1, 2, 3, 4])" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "arr = np.arange(5)\n", + "np.concatenate((arr,arr), axis=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Matrix multiplication" + ] + }, + { + "cell_type": "code", + "execution_count": 156, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 30, 36, 42],\n", + " [ 66, 81, 96],\n", + " [102, 126, 150]])" + ] + }, + "execution_count": 156, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x=np.array([[1,2,3], [4,5,6], [7,8,9]])\n", + "y=np.array([[1,2,3], [4,5,6], [7,8,9]])\n", + "np.dot(x,y)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Matrix multiplication is done using the `dot()` function" + ] + }, + { + "cell_type": "code", + "execution_count": 157, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 30, 36, 42],\n", + " [ 66, 81, 96],\n", + " [102, 126, 150]])" + ] + }, + "execution_count": 157, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x.dot(y)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "##### Element-wise multiplication using the '*' operator" + ] + }, + { + "cell_type": "code", + "execution_count": 159, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1, 4, 9],\n", + " [16, 25, 36],\n", + " [49, 64, 81]])" + ] + }, + "execution_count": 159, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x*y" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Element-wise squaring" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81])" + ] + }, + "execution_count": 38, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x**2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Element-wise reciprical" + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1. , 0.5 , 0.33333333],\n", + " [ 0.25 , 0.2 , 0.16666667],\n", + " [ 0.14285714, 0.125 , 0.11111111]])" + ] + }, + "execution_count": 161, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1./x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Element-wise logarithms/exponents" + ] + }, + { + "cell_type": "code", + "execution_count": 162, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0. , 0.69314718, 1.09861229],\n", + " [ 1.38629436, 1.60943791, 1.79175947],\n", + " [ 1.94591015, 2.07944154, 2.19722458]])" + ] + }, + "execution_count": 162, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.log(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2.71828183e+00, 7.38905610e+00, 2.00855369e+01],\n", + " [ 5.45981500e+01, 1.48413159e+02, 4.03428793e+02],\n", + " [ 1.09663316e+03, 2.98095799e+03, 8.10308393e+03]])" + ] + }, + "execution_count": 163, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.exp(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Element-wise addition" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 2, 3, 4],\n", + " [ 5, 6, 7],\n", + " [ 8, 9, 10]])" + ] + }, + "execution_count": 165, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "1+x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Transpose of a matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1, 4, 7],\n", + " [2, 5, 8],\n", + " [3, 6, 9]])" + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x.T" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Maximum and minimum of matrix values" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "9" + ] + }, + "execution_count": 170, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.max(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "1" + ] + }, + "execution_count": 171, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.min(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "### Sum and product of all elements" + ] + }, + { + "cell_type": "code", + "execution_count": 173, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "45" + ] + }, + "execution_count": 173, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 174, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([12, 15, 18])" + ] + }, + "execution_count": 174, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(x,axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 175, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 6, 15, 24])" + ] + }, + "execution_count": 175, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(x,axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 176, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "45" + ] + }, + "execution_count": 176, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 177, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "362880" + ] + }, + "execution_count": 177, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.product(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 178, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 28, 80, 162])" + ] + }, + "execution_count": 178, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.product(x,axis=0)" + ] + }, + { + "cell_type": "code", + "execution_count": 179, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 6, 120, 504])" + ] + }, + "execution_count": 179, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.product(x,axis=1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Inverse and pseudo-inverse of a matrix" + ] + }, + { + "cell_type": "code", + "execution_count": 181, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.5, 0. , 0. ],\n", + " [ 0. , 0.5, 0. ],\n", + " [ 0. , 0. , 0.5]])" + ] + }, + "execution_count": 181, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x=2*np.eye(3)\n", + "np.linalg.inv(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 182, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.5, 0. , 0. ],\n", + " [ 0. , 0.5, 0. ],\n", + " [ 0. , 0. , 0.5]])" + ] + }, + "execution_count": 182, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.linalg.pinv(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##Plotting data\n", + "###Plotting generated data" + ] + }, + { + "cell_type": "code", + "execution_count": 183, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 183, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(np.arange(10))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Line color, labels, title and legend\n", + "### Saving a graph\n", + "### Subplots\n", + "### Axis scaling\n", + "### Creating/clearing figures\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Control statements\n", + "### For loops" + ] + }, + { + "cell_type": "code", + "execution_count": 184, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "a\n", + "b\n", + "e\n" + ] + } + ], + "source": [ + "li = ['a', 'b', 'e']\n", + "for e in li:\n", + " print e" + ] + }, + { + "cell_type": "code", + "execution_count": 185, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 a\n", + "1 b\n", + "2 e\n" + ] + } + ], + "source": [ + "d = enumerate(li)\n", + "for k,v in d:\n", + " print k,v" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### While loops" + ] + }, + { + "cell_type": "code", + "execution_count": 186, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please enter 'hello':goodbye\n", + "Please enter 'hello':hello\n" + ] + } + ], + "source": [ + "n = ''\n", + "while n.strip() != 'hello':\n", + " n = raw_input(\"Please enter 'hello':\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### break statement" + ] + }, + { + "cell_type": "code", + "execution_count": 188, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please enter 'hello':bye\n", + "Please enter 'hello':hello\n" + ] + } + ], + "source": [ + "while True:\n", + " n = raw_input(\"Please enter 'hello':\")\n", + " if n.strip() == 'hello':\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### if-elif-else statement" + ] + }, + { + "cell_type": "code", + "execution_count": 189, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please enter an integer: 42\n", + "More\n" + ] + } + ], + "source": [ + "x = int(raw_input(\"Please enter an integer: \"))\n", + "\n", + "if x < 0:\n", + " x = 0\n", + " print 'Negative changed to zero'\n", + "elif x == 0:\n", + " print 'Zero'\n", + "elif x == 1:\n", + " print 'Single'\n", + "else:\n", + " print 'More'\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Functions\n", + "\n", + "### PYTHONPATH environment variable\n", + "## Vectorization\n", + "### Vectorized implementation\n", + "### Unvectorized implementation" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 2", + "language": "python", + "name": "python2" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.10" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/ex0.csv b/ex0.csv new file mode 100644 index 0000000..81358ff --- /dev/null +++ b/ex0.csv @@ -0,0 +1,5 @@ +6.1101,17.592 +5.5277,9.1302 +8.5186,13.662 +7.0032,11.854 +5.8598,6.8233