Вы находитесь на странице: 1из 38

Munchen Scientic Computing in Computer Science, Technische Universitat

Part VI Scientic Computing in Python

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 80

Munchen Scientic Computing in Computer Science, Technische Universitat

More on Maths
Module math
Constants pi and e Functions that operate on int and float All return values float ceil ( x ) floor ( x ) exp ( x ) fabs ( x ) ldexp (x , i ) log ( x [ , base ]) log10 ( x ) modf ( x ) pow (x , y ) sqrt ( x )

# same as globally defined abs () # x * 2** i # == log (x , 10) # ( fractional , integer part ) # x ** y

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 81

Munchen Scientic Computing in Computer Science, Technische Universitat

Module math (2)


Trigonometric functions assume radians cos ( x ); cosh ( x ); acos ( x ) sin ( x ); ... tan ( x ); ... degrees ( x ) radians ( x ) # rad -> deg # deg -> rad

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 82

Munchen Scientic Computing in Computer Science, Technische Universitat

Module math (2)


Trigonometric functions assume radians cos ( x ); cosh ( x ); acos ( x ) sin ( x ); ... tan ( x ); ... degrees ( x ) radians ( x ) inf/nan float ( " inf " ) float ( " - inf " ) float ( " nan " ) # rad -> deg # deg -> rad

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 82

Munchen Scientic Computing in Computer Science, Technische Universitat

Module math (2)


Trigonometric functions assume radians cos ( x ); cosh ( x ); acos ( x ) sin ( x ); ... tan ( x ); ... degrees ( x ) radians ( x ) inf/nan float ( " inf " ) float ( " - inf " ) float ( " nan " ) Use module cmath for complex numbers
Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 82

# rad -> deg # deg -> rad

Munchen Scientic Computing in Computer Science, Technische Universitat

Now to Real Maths. . .


Standard sequence types (list, tuple, . . . )
Can be used as arrays Can contain different types of objects

Very exible, but slow Loops are not very efcient either

For efcient scientic computing, other datatypes and methods

required

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 83

Munchen Scientic Computing in Computer Science, Technische Universitat

Now to Real Maths. . .


Standard sequence types (list, tuple, . . . )
Can be used as arrays Can contain different types of objects

Very exible, but slow Loops are not very efcient either

For efcient scientic computing, other datatypes and methods

required

Modules
NumPy Matplotlib SciPy

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 83

Munchen Scientic Computing in Computer Science, Technische Universitat

NumPy

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 84

Munchen Scientic Computing in Computer Science, Technische Universitat

Module numpy
Homogeneous arrays
NumPy provides arbitrary-dimensional homogeneous arrays Example from numpy import * a = array ([[1 ,2 ,3] ,[4 ,5 ,6]]) print a type ( a ) a . shape print a [0 ,2] a [0 ,2] = -1 b = a *2 print b

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 85

Munchen Scientic Computing in Computer Science, Technische Universitat

Array creation
Create from (nested) sequence type Direct access with method [] a = array ([1 ,2 ,3 ,4 ,5 ,6 ,7 ,8]) a [1] a = array ([[1 ,2 ,3 ,4] ,[5 ,6 ,7 ,8]]) a [1 ,1] a = array ([[[1 ,2] ,[3 ,4]] ,[[5 ,6] ,[7 ,8]]]) a [1 ,1 ,1]

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 86

Munchen Scientic Computing in Computer Science, Technische Universitat

Array creation
Create from (nested) sequence type Direct access with method [] a = array ([1 ,2 ,3 ,4 ,5 ,6 ,7 ,8]) a [1] a = array ([[1 ,2 ,3 ,4] ,[5 ,6 ,7 ,8]]) a [1 ,1] a = array ([[[1 ,2] ,[3 ,4]] ,[[5 ,6] ,[7 ,8]]]) a [1 ,1 ,1] Properties of arrays a . ndim a . shape a . size a . dtype a . itemsize # # # # # number of dimensions dimensions number of elements data type number of bytes

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 86

Munchen Scientic Computing in Computer Science, Technische Universitat

Data Types
Exact, C/C++-motivated type of array elements can be specied Otherwise, defaults are used Some types (different storage requirements): int_, int8, int16, int32, int64, float_, float8, float16, float32, float64, complex_, complex64, bool_, character, object_ Standard python type names result in default behaviour array ([[1 ,2 ,3] ,[4 ,5 ,6]] , dtype = int ) array ([[1 ,2 ,3] ,[4 ,5 ,6]] , dtype = complex ) array ([[1 ,2 ,3] ,[4 ,5 ,6]] , dtype = int8 ) array ([[1 ,2 ,3] ,[4 ,5 ,1000]] , dtype = int8 ) # wrong array ([[1 ,2 ,3] ,[4 ,5 , " hi " ]] , dtype = object ) Exception: object_ stores pointers to objects
Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 87

Munchen Scientic Computing in Computer Science, Technische Universitat

Create Arrays
(Some) default matrices (optional parameter: dtype) arange ([ a ,] b [ , stride ]) zeros ( (3 ,4) ) ones ( (1 ,3 ,4) ) empty ( (3 ,4) ) linspace (a , b [ , n ]) logspace (a , b [ , n ]) identity ( n ) # as range , 1 D

# # # #

uninitialized ( fast ) n equidistant in [a , b ] 10** a to 10** b 2d

fromfunction ( lambda i , j : i +j , (3 ,4) , dtype = int ) def f (i , j ): return i + j fromfunction (f , (3 ,4) , dtype = int )

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 88

Munchen Scientic Computing in Computer Science, Technische Universitat

Manipulate Arrays
Reshaping arrays a = arange (12) b = a . reshape ((3 ,4)) a . resize ((3 ,4)) a . transpose () a . flatten ()

# in - place !

# Example use - case : a = arange (144) a . resize ((12 ,12))

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 89

Munchen Scientic Computing in Computer Science, Technische Universitat

Create Arrays (2)


Create/Copy from existing data a = arange (12); a . resize ((3 ,4)) copy ( a ) diag ( a ); tril ( a ); triu ( a ) empty_like ( a ) zeros_like ( a ) ones_like ( a ) # copy shape

a = loadtxt ( " matrix . txt " ) # fromfile () if binary # plenty of options : comments , delim . , usecols , ... Matrix output a . tolist () savetxt ( " matrix . txt " , a )
Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 90

# tofile ()

if binary

Munchen Scientic Computing in Computer Science, Technische Universitat

Array Access and Manipulation


Typical slicing operations can be used Separate dimensions by comma a = arange (20); a . resize ((4 ,5)) a [1] a [1:2 ,:] a [: ,::2] a [::2 ,::2] a [::2 ,::2] = [[0 , -2 , -4] ,[ -10 , -12 , -14]] a [1::2 ,1::2] = -1* a [1::2 ,1::2] Selective access a [ a > 3] a [ a > 3] = -1

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 91

Munchen Scientic Computing in Computer Science, Technische Universitat

Array Access
Iterating over entries for row in a : print row b = arange (30); b . resize ((2 ,3 ,4)) for row in b : for col in row : print col for entry in a . flat : print entry

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 92

Munchen Scientic Computing in Computer Science, Technische Universitat

Computing with Arrays


Fast built-in methods working on arrays a = arange (12); a . resize ((3 ,4)) 3* a a **2 a + a ^2 sin ( a ) sqrt ( a ) prod ( a ) sum ( a ) it = transpose ( a ) x = array ([1 ,2 ,3]) y = array ([10 ,20 ,30]) inner (x , y ) dot ( it , x ) cross (x , y )
Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 93

Munchen Scientic Computing in Computer Science, Technische Universitat

Computing with Arrays


There is much more. . . var () mean () min () svd () tensordot () ... cov () median () max () std ()

Matrices (with mat) are subclasses of ndarray, but strictly

two-dimensional, with additional attributes


m = mat ( a ) m.T # transpose m.I # inverse m.A # as 2 d array m.H # conjugate transpose

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 94

Munchen Scientic Computing in Computer Science, Technische Universitat

Submodules
Module numpy.random
Draw from plenty of different distributions More powerful than module random Work on and return arrays from numpy . random import * binomial (10 , 0.5) # 10 trials , success 50% binomial (10 , 0.5 , 15) randint (0 , 10 , 15) # [0 ,10) , int rand () rand (3 ,4) # [0 ,1) #

(3 x4 ) array

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 95

Munchen Scientic Computing in Computer Science, Technische Universitat

Submodules (2)
Module numpy.linalg
Core linear algebra tools norm ( a ); norm ( x ) inv ( a ) solve (a , b ) # LAPACK LU decomp . det ( a ) eig ( a ) cholesky ( a )

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 96

Munchen Scientic Computing in Computer Science, Technische Universitat

Submodules (2)
Module numpy.linalg
Core linear algebra tools norm ( a ); norm ( x ) inv ( a ) solve (a , b ) # LAPACK LU decomp . det ( a ) eig ( a ) cholesky ( a )

Module numpy.fft
Fourier transforms

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 96

Munchen Scientic Computing in Computer Science, Technische Universitat

Submodules (2)
Module numpy.linalg
Core linear algebra tools norm ( a ); norm ( x ) inv ( a ) solve (a , b ) # LAPACK LU decomp . det ( a ) eig ( a ) cholesky ( a )

Module numpy.fft
Fourier transforms

There is more. . .

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 96

Munchen Scientic Computing in Computer Science, Technische Universitat

Version Mania
Current Situation

SciPy

Matplotlib IPython pylab NumPy

python

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 97

Munchen Scientic Computing in Computer Science, Technische Universitat

Version Mania
Problems:
Numpy, scipy, pylab, ipython and matplotlib often used

simultaneously arrays, e.g.)

The packages depend on each other (matplotlib uese numpy Depending on OS (version), different packages may have to be

installed (i.e. the module name in import command may be different!).

Vision: All in one (new) module PyLab!


exists as unofcial package Attention Name: again pylab!

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 98

Munchen Scientic Computing in Computer Science, Technische Universitat

Matplotlib

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 99

Munchen Scientic Computing in Computer Science, Technische Universitat

Matplotlib

What is it?
Object-oriented library for plotting 2D Designed to be similar to the matlab plotting functionality Designed to plot scientic data, built on numpy datastructures

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 100

Munchen Scientic Computing in Computer Science, Technische Universitat

Several Ways to do the Same


python/ipython interactive
> ipython import scipy , matplotlib . pylab x = scipy . randn (10000) matplotlib . pylab . hist (x , 100) > ipython import numpy . random , matplotlib . pylab x = numpy . random . randn (10000) matplotlib . pylab . hist (x , 100)

ipython in pylab mode


> ipython - pylab x = randn (10000) hist (x , 100)
Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 101

Munchen Scientic Computing in Computer Science, Technische Universitat

Example - First Plot


partially taken from http://matplotlib.sourceforge.net/users/screenshots.html
from pylab import * x = arange (0.0 , 2* pi , 0.01) y = sin ( x ) plot (x , y , linewidth =4) plot (x , y ) xlabel ( Label for x axis ) ylabel ( Label for y axis ) title ( Simple plot of sin ) grid ( True ) show ()

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 102

Munchen Scientic Computing in Computer Science, Technische Universitat

Example Using Subplots


from pylab import * def f ( t ): s1 = cos (2* pi * t ) e1 = exp ( - t ) return multiply ( s1 , e1 ) t1 = arange (0.0 , 5.0 , 0.1) t2 = arange (0.0 , 5.0 , 0.02) t3 = arange (0.0 , 2.0 , 0.01) show () # gives error but helps ; -) subplot (2 ,1 ,1) # rows , columns , which to show plot ( t1 , f ( t1 ) , go , t2 , f ( t2 ) , k - - ) subplot (2 ,1 ,2) plot ( t3 , cos (2* pi * t3 ) , r . )
Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 103

Munchen Scientic Computing in Computer Science, Technische Universitat

Example Using Subplots

# previous slide continued subplot (2 ,1 ,1) grid ( True ) title ( A tale of 2 subplots ) ylabel ( Damped oscillation ) subplot (2 ,1 ,2) grid ( True ) xlabel ( time ( s ) ) ylabel ( Undamped )

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 104

Munchen Scientic Computing in Computer Science, Technische Universitat

Example - Histogram
# start ipython - pylab or use imports : # from matplotlib . mlab import * # from matplotlib . pyplot import * from numpy import * mu , sigma = 100 , 15 x = mu + sigma * random . randn (10000) n , bins , patches = hist (x , 50 , normed =1 , \ facecolor = green , alpha =0.75) # add a best fit line y = normpdf ( bins , mu , sigma ) plot ( bins , y , r - - , linewidth =1) axis ([40 , 160 , 0 , 0.03]) plt . show ()
Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 105

Munchen Scientic Computing in Computer Science, Technische Universitat

SciPy

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 106

Munchen Scientic Computing in Computer Science, Technische Universitat

More than NumPy?


SciPy depends on NumPy Built to work on NumPy arrays Providing functionality for mathematics, science and engineering Still under development NumPy is mostly about (N-dimensional) arrays SciPy comprises a large number of tools using these arrays SciPy includes the NumPy functionality (only one import

necessary)

A lot more libraries for scientic computing are available, some of

them using NumPy and SciPy

Here, just a short overview will be given www.scipy.org for more material (incl. the content of the

following slides)

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 107

Munchen Scientic Computing in Computer Science, Technische Universitat

SciPy Organisation - Subpackages


cluster constants fftpack integrate interpolate io linalg maxentropy ndimage odr optimize signal sparse spatial special stats weave Clustering algorithms Physical and mathematical constants Fast Fourier Transform routines Integration and ordinary differential equation solvers Interpolation and smoothing splines Input and Output Linear algebra Maximum entropy methods N-dimensional image processing Orthogonal distance regression Optimization and root-nding routines Signal processing Sparse matrices and associated routines Spatial data structures and algorithms Special functions Statistical distributions and functions C/C++ integration
108

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013

Munchen Scientic Computing in Computer Science, Technische Universitat

Special Functions
Airy functions Elliptic functions Bessel functions (+ Zeros, Integrals, Derivatives, Spherical,

Ricatti-) Struve functions A large number of statistical functions Gamma functions Legendre functions Orthogonal polynomials (Legendre, Chebyshev, Jacobi,...) Hypergeometric functios parabolic cylinder functions Mathieu functions Spheroidal wave functions Kelvin functions ...

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 109

Munchen Scientic Computing in Computer Science, Technische Universitat

Example: Interpolation - Linear

import numpy as np import matplotlib . pyplot as plt from scipy import interpolate x = np . arange (0 ,10) y = np . exp ( - x /3.0) f = interpolate . interp1d (x , y ) xnew = np . arange (0 ,9 ,0.1) plt . plot (x ,y , o , xnew , f ( xnew ) , - ) plt . title ( Linear interpolation ) plt . show ()

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 110

Munchen Scientic Computing in Computer Science, Technische Universitat

Example: Interpolation - Cubic Spline


import numpy as np import matplotlib . pyplot as plt from scipy import interpolate x = np . arange (0 , 2.25* np . pi , np . pi /4) y = np . sin ( x ) spline = interpolate . splrep (x ,y , s =0) xnew = np . arange (0 ,2.02* np . pi , np . pi /50) ynew = interpolate . splev ( xnew , spline ) plt . plot (x ,y , o , xnew , ynew ) plt . legend ([ Linear , Cubic Spline ]) plt . axis ([ -0.05 ,6.33 , -1.05 ,1.05]) plt . title ( Cubic - spline interpolation ) plt . show ()

Tobias Neckel: Scripting with Python... and beyond Compact Course @ GRS, June 03 - 07, 2013 111

Вам также может понравиться