0% found this document useful (0 votes)
76 views

M. Scott Shell

This document provides an overview of NumPy, an open-source Python library for working with multi-dimensional arrays and matrices. It introduces NumPy arrays, how to index and slice them, common attributes and methods, operations on arrays, array selection, and basic linear algebra and plotting functions. Resources for learning NumPy from MATLAB are also listed.

Uploaded by

puneethkb
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
76 views

M. Scott Shell

This document provides an overview of NumPy, an open-source Python library for working with multi-dimensional arrays and matrices. It introduces NumPy arrays, how to index and slice them, common attributes and methods, operations on arrays, array selection, and basic linear algebra and plotting functions. Resources for learning NumPy from MATLAB are also listed.

Uploaded by

puneethkb
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 15

Resources

I M. Scott Shell,
http://www.engr.ucsb.edu/%7eshell/che210d/numpy.pdf
I http://wiki.scipy.org/NumPy_for_Matlab_Users
I
http://mathesaurus.sourceforge.net/matlab-numpy.html

1 / 12
Numpy arrays

I import numpy as np
I Numpy provides class ndarray, called “array”
I Create array from a list
>>> x = np.array([3.0,5,7,5])
>>> x
array([ 3., 5., 7., 5.])
I If appear to be integers in list, need “float”
I 2D arrays
>>> A = np.array([[8.,1.,6.],[3.,5.,7.],[4.,9.,2.]])
array([[ 8., 1., 6.],
[ 3., 5., 7.],
[ 4., 9., 2.]])

2 / 12
Subscripts
I Use brackets to denote
subscripts
I Start counting at 0
>>> x[0]
3.0
>>> A[1,2]
7.0
>>> x
I Colons work, be careful of last array([ 3., 5., 7., 5.])
value! >>> A
>>> x[0:1] array([[ 8., 1., 6.],
array([ 3.0]) [ 3., 5., 7.],
[ 4., 9., 2.]])

3 / 12
Subscripts
I Use brackets to denote
subscripts
I Start counting at 0
>>> x[0]
3.0
>>> A[1,2]
7.0
>>> x
I Colons work, be careful of last array([ 3., 5., 7., 5.])
value! >>> A
>>> x[0:1] array([[ 8., 1., 6.],
array([ 3.0]) [ 3., 5., 7.],
>>> x[0:2] [ 4., 9., 2.]])
array([ 3.0, 5.])

3 / 12
Subscripts
I Use brackets to denote
subscripts
I Start counting at 0
>>> x[0]
3.0
>>> A[1,2]
7.0
>>> x
I Colons work, be careful of last array([ 3., 5., 7., 5.])
value! >>> A
>>> x[0:1] array([[ 8., 1., 6.],
array([ 3.0]) [ 3., 5., 7.],
>>> x[0:2] [ 4., 9., 2.]])
array([ 3.0, 5.])
>>> A[:,2]
array([ 6., 7., 2.])

3 / 12
Subscripts
I Use brackets to denote
subscripts
I Start counting at 0
>>> x[0]
3.0
>>> A[1,2]
7.0
>>> x
I Colons work, be careful of last array([ 3., 5., 7., 5.])
value! >>> A
>>> x[0:1] array([[ 8., 1., 6.],
array([ 3.0]) [ 3., 5., 7.],
>>> x[0:2] [ 4., 9., 2.]])
array([ 3.0, 5.])
>>> A[:,2]
array([ 6., 7., 2.])
I Negative indices count from end
>>> x[-1]
5.0
3 / 12
Attributes

>>> A.shape
(3, 3)
>>> A.flatten()
array([ 8., 1., 6., 3., 5., 7., 4., 9., 2.])
>>> B=A.copy()
>>> B[1,1]=-1
>>> A[1,1]
5.0
>>> B[1,1]
-1.0
>>> A.transpose()
array([[ 8., 3., 4.],
[ 1., 5., 9.],
[ 6., 7., 2.]])

4 / 12
Methods
>>> x=np.arange(24) # array-range
>>> y=x.reshape([4,6]).copy() # turn into 4 X 6 matrix
>>> y
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
>>> np.sum(y) # sum all of y
276
>>> y.sum() # sum all of y
276
>>> y.sum(0) # sum columns
array([36, 40, 44, 48, 52, 56])
>>> y.sum(axis=0) # sum columns
array([36, 40, 44, 48, 52, 56])
>>> np.sum(y,axis=0) # sum columns
array([36, 40, 44, 48, 52, 56])
>>> np.sum(y[:,0]) # sum only first column
36
>>> np.sum(y[:,1]) # sum only second column
40
>>> y.sum(1) # sum along rows
array([ 15, 51, 87, 123])
>>> y.sum(axis=1) # sum along rows
array([ 15, 51, 87, 123])
>>> np.sum(y[0,:]) # sum first row
15

5 / 12
Useful attributes

I π =np.pi, e =np.e
I 1d array of zeros x=np.zeros(N)
I 2d array of zeros x=np.zeros([N,M])
I Array of zeros same size as: y=np.zeros_like(x)
I np.ones, np.ones_like
I np.empty, np.empty_like

6 / 12
Functions like M ATLAB

I np.diag
I np.random.rand
I np.tril, np.triu

7 / 12
Operations on arrays

Suppose x is the array [xi ], y is the array [yi ], A is the 2d array [aij ]
and B is the 2d array [bij ]:
I All operations are elementwise.
I np.sin(x) is the array [sin(xi )], same for matrices
I 3*x is the array [3xi ], same for matrices
I x+y is the array [xi + yi ], same for matrices
I x*y is the array [xi yi ], same for matrices
I x/y is the array [xi /yi ], same for matrices
P
I np.dot(x,y)= i xi yi (usual dot product)
P
I np.dot(A,B)=[ k aik bkj ] (usual matrix multiplication)

8 / 12
Array selection

It is sometimes convenient to select particular elements from arrays.


I np.max(x) finds the maximum value.
I np.argmax(x) finds the locaion of the maximum value.
I Can use axis=n
I Also np.min, np.argmin
I Boolean selection
>>> x=np.array([[5.,3.],[4.,9.]])
>>> x[x>=5]
array([ 5., 9.])
>>> x[np.logical_and(x>=5,x<8)]
array([ 5.])

9 / 12
Array selection by subscript
I One-dimensional arrays
>>> x=2*np.arange(9.)
>>> x
array([ 0., 2., 4., 6., 8., 10., 12., 14., 16.])
>>> i=np.array([0,0,1,5,2])
>>> i
array([0, 0, 1, 5, 2])
>>> x[i]
array([ 0., 0., 2., 10., 4.])
I Two-dimensional arrays: selector for each axis.
>>> A=x.reshape([3,3])
>>> A
array([[ 0. , 2., 4.],
[ 6., 8., 10. ],
[ 12. , 14., 16.]])
# construct minor associated with A[1,0]
>>> i=[[0,0],[2,2]] # 2-axis means result will be 2-axis
>>> j=[[1,2],[1,2]]
>>> A[i,j]
array([[ 2., 4.],
[ 14., 16.]])
10 / 12
Higher-level linear algebra

I import scipy.linalg as la
I Built on BLAS and Lapack
I la.norm: vector and matrix norm
I la.det: determinant
I la.solve: solve system of equations
I la.inv: construct inverse matrix
I la.eig: eigenvalues and eigenvectors
I la.eigvals: eigenvalues only
I fenics does not use this package!

11 / 12
Plotting
I import matplotlib.pyplot as plt
I Must use plt.show() to see your plot!
I Plot like M ATLAB
>>> x=np.linspace(0,4*np.pi,1000)
>>> plt.plot(x,np.exp(-x),x,np.sin(x))
[<matplotlib.lines.Line2D object at 0x4306a90>, <matp
>>> plt.legend((’exp’,’sin’))
<matplotlib.legend.Legend object at 0x45df890>
>>> plt.show()
I plt.semilogy also works

12 / 12

You might also like