Home

PythonScientific - Society For Promotion of Alternative Computing

image

Contents

1. Tip Array wise comparisons gt 2 gt gt og NoOr array il 2 3 4 gt gt gt b Novarray 14 2 2 4 gt gt gt C Nosarray ll 2 3 41 2 5 npecarray egqual aj b EE C gt gt gt Np array eguala C True Note Linear algebra The sub module numpy 1inalg implements basic linear algebra such as solving linear systems singular value decomposition etc However it is not guaranteed to be compiled using efficient routines and thus we recommend the use of scipy linalg as detailed in section Linear algebra operations scipy linalg page 104 Exercise other operations Look at the help for np allclose When might this be useful e Look at the help fornp triuandnp tril e Is the transpose a view or a copy What implications does this have for making a matrix symmetric 3 2 2 Basic reductions Computing sums gt gt gt x np atrav l 2 3 4 gt gt gt NO Sum x 10 gt gt gt x sum 10 3 2 Numerical operations on arrays 57 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 axis O Sum by rows and by columns soc x c DOearrey ii 117 12 2110 gt gt gt x array ns ely 2r de gt gt gt x sum axis 0 columns first dimension arbsaytL35 31 mores so esae e NT SS CA gt gt gt x sum axis 1 rows second dimension Buc nz gt gt gt xO Sm y sls 7 ecsaumt E Tip Same idea in higher dimensions a Np random ra
2. 17 3 5 Deferral Being able to defer the definition of a trait and its value to another object is a powerful feature of Traits from traits api import HasTraits Instance DelegatesTo Float Range from reservoir import Reservoir class ReservoirState HasTraits Keeps track of the reservoir state given the initial storage mnm reservoir Instance Reservoir min storage Float max_storage DelegatesTo reservoir min release Float max release DelegatesTo reservoir state attributes storage Range low min_storage high max_storage monta ce uU SS inflows Float desc inflows hm3 release Range low min release high max release spillage Float desc Spillage hm3 def print_state self print Storage tRelease tInflows tSpillage Ar format VE Jorn 4 7s2rr for cin tanga A print str format format self storage self release self inflows self spillage Print x 79 l if name main projectA Reservoir name Project A max storage 30 max release 100 0 hydraulic head 60 efficiency 0 8 17 3 What are Traits 311 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 State ReservoirState reservoir projectA storage 10 state release 90 state inflows state print state print How do we update the current storage A special trait allows to manage events and trigger function c
3. The desc metadata of the traits can be used to provide a more descriptive information about the trait from traits api import HasTraits Str Float class Reservoir HasTraits name Str max storage Float 100 desc Maximal storage hm3 Let s now define the complete reservoir class from traits api import HasTraits Str Float Range class Reservoir HasTraits name Str max storage Float le6 desc Maximal storage hm3 max release Float 10 desc Maximal release m3 s head Float 10 desc Hydraulic head m efficiency Range 0 1 def energy production self release Returns the energy production Wh for the given release m3 s FX power 1000 x 9 81 self head release x self efficiency return power x 3600 1f name main ae reservoir Reservoir name Project A max_storage 30 Max release 100 0 head 60 efficiency 0 8 release 80 print Releasing m3 s produces kWh format 17 3 What are Traits 309 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 release reservoir energy_production release 17 3 4 Visualization opening a dialog The Traits library is also aware of user interfaces and can pop up a default view for the Reservoir class reservoirl Reservoir reservoirl edrt traits GET Fr um n P N Edit properties Efficiency 0 0 V 1 0 D 8 Head 10 Hydraulic head 60 Max release 10
4. In 84 cos soathwexicts 7 junk stxc Out TSA True 2 7 Standard Library 36 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In 186 os Seen ss hile SUC ice Out 86 True In 87 2 gt os pa hisdir Junk tt Out les False In 88 os path expanduser local OuE BS er Users dourne local In 92 os paths jorm cs pathvexpanduser eA eal a Ain oue OA 7Users cburns lossl bun Running an external command in 3 os system 7 is baste te Does demo py PUMCELONG yt Se o e aon language r Se etaar ibrary rst control flow rst Exceptions se dO qe Dyenon loge spd demo2 py First Seep sak sc DOIDI SE reusing code rst Note Alternative to os system A noteworthy alternative to os system is the sh module Which provides much more convenient ways to obtain the output error stream and exit code of the external command In 20 import sh In 20 com sh 1s In 21 print con basic types ret exceptions rst OOP ret Standard library csc control Tiowerse Tirst steps rst python language rst demo2 py nou NOn S Sik Pytnon lego7png demo py ROM alr Sc reusing_code rst In 22 print com exit code 0 In 23 type com OGL 123 sh RumningConmand Walking a directory os path walk generates a list of filenames in a directory tree In 10 for d rpath dirnames filenames in osS walk os curdrr s for fp in filenames print S pall aospach fp
5. File lt ipython console gt line 1 Hin wb s up SYMECaxXELrOr Invalid st doc The newline character is N n and the tab character is Nt Tip Strings are collections like lists Hence they can be indexed and sliced using the same syntax and rules Indexing gt gt gt a hello gt gt gt a 0 ry gt gt gt a 1 si gt gt gt al 1 2 Tip Remember that negative indices correspond to counting from the right end Slicing gt gt gt a hello world gt gt gt a 3 6 3rd to 6th excluded elements elements 3 4 5 ikon som cpasqpOUsIoxIwntaxcuoTotcbeposbopD Step bo o gt gt gt a 3 every three characters from beginning to end bez Tip Accents and special characters can also be handled in Unicode strings see http docs python org tutorial introduction html unicode strings A string is an immutable object and it is not possible to modify its contents One may however create new strings from the original one In 53 a hello world In 54 2 tz Traceback most recent call last Bile cstdunm Line 15 um module TypeError str object does not support item assignment En Fosil eteplececu y TaU dm Cups e herz lo Vorn In 56i aer ploce i s Tx Cut 51 Bherzo worzd 2 2 Basic types 16 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Tip Strings have many useful methods such as a replace as seen above Re
6. black Warning Note that L start stop contains the elements with indices i suchas start lt i lt stop i ranging from start to stop 1 Therefore L start stop has stop start elements Slicing syntax L start stop stride Tip All slicing parameters are optional gt gt gt L red blue green black white gt gt gt quse black white 2x qe red blue green 2x Joe red green white Lists are mutable objects and can be modified gt gt gt L 0 yellow gt gt gt L yellow blue green black white gt gt gt L 2 4 gray purple gt gt gt L vellow blue gray purple white Note The elements of a list may have different types gt gt gt b 3 200 Hello gt gt gt L l5 200 helio oo GEL GIZ 200 hello Tip For collections of numerical data that all have the same type it is often more efficient to use the array type provided by the numpy module A NumPy array is a chunk of memory containing fixed sized items With NumPy arrays operations on elements can be faster because elements are regularly spaced in memory and more operations are performed through specialized C functions instead of Python loops Tip Python offers a large panel of functions to modify lists or query them Here are a few examples for more details see http doc
7. efficiency 0 8 State ReservoirState reservoir projectA storage 15 state release 5 0 state inflows 17 3 What are Traits 312 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 release the maximum amount of water during 3 time steps state update_storage True state print state State update storage True state print_state state update_storage True state print_state Dependency between objects can be made automatic using the trait Property The depends_on attribute ex presses the dependency between the property and other traits When the other traits gets changed the property is invalidated Again Traits uses magic method names for the property e get XXX for the getter of the XXX Property trait e set XXX for the setter of the XXX Property trait from traits api import HasTraits Instance DelegatesTo Float Range from traits api import Property from reservoir import Reservoir class ReservoirState HasTraits Keeps track of the reservoir state given the initial storage For the simplicity of the example the release is considered in hm3 timestep and not in m3 s mmm reservoir Instance Reservoir max storage DelegatesTo reservoir Float DelegatesTo reservoir min_release max_release state attributes storage Property depends_on inflows release y control attributes inflows Float desc Inflows hm3 f release Ran
8. gt gt gt mtx sparse cosr matrix data row col shape 3 3 gt gt gt mtx lt 3x 3 Sparse Matrix Of type seype numpy dmb 5D with 6 stored elements in Compressed Sparse Row format gt gt gt gt mtx todense mere cios ode OD T LOr 20 z Pa Sv 351 gt gt gt mtx data array ile 2 Suy ay 3 9 gt gt gt mtx indices eue QM x d M c sd DesimbSs gt gt gt mou cC ppt arrey 0 2 329 dtype int 92 1 e create using data indices indptr tuple 11 2 Storage Schemes 220 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 sos data mp erray Ul 2 32242 Drel gt gt gt indices Mi warray yx 2 Oy aly 21 ae lois moare a iO A aye SD gt gt gt mtx sparse csr_matrix data indices indptr shape 3 3 gt gt gt mtx todense Mente esc le Os x 2l LO Oy 214 14 5 erp Compressed Sparse Column Format CSC column oriented three NumPy arrays indices indptr data indices is array of row indices data is array of corresponding nonzero values indptr points to column starts in indices and data x lengthisn col 1 last item number of values length of both indices and data x nonzero values of the i th column are data indptr i indptr i 1 with row indices indices indptr i indptr i 1 x item i j can be accessed as data indptr j k where k is position of i in zndaices indprtr lj zzndptrlj tT1 j subclass of cs mat
9. Conii py BS st set Svn version pyQ Ec HMM P iiS setup pyc Svn vetrsTon pyc CORSI ES hacen setupscons py THANKS txt fttpasck linsolve setupscons pyc TOCHANGE ext merae o maxentropy signal vers ron pye cts p gcc sparse version Oy INSTALL txt ndimage spatial weave integrate Cdr special interpolate optimize sabe S cd ndimage slic 2 5 Reusing code scripts and modules 32 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 doccer py fourier pyc interpolation Pye morphedogyepye SCrUPI pyc doc cer pye info pya interpolation pPySo nd image so setupscons py fu lrers pya MESE DUET ST Oye measurements py shh Suppor py SeCrtuUpscons pvc filters pyc __init__ py measurements pyc Tit SU pore p GT MESS SI fourier pud Inii yc morphology rye setup py From Ipython In 1 import scipy in 2 scipy e Tile _ Out zis usr l1sb psuhon2 6 drstepackadges scvrpyv Init Jpyct In 3 import scipy version In 4 scipy version version cut In 5 import scipy ndimage morphology In 6 from scipy ndimage import morphology En ply e morphology binary_dilation Type ANE On Base Class ue Cab orm String Porm lt function banary dilatvon at Ox9bedde4 Namespace Interactive File usr lib python2 6 dist packages scipy ndimage morphology py Definition morphology binaryodilation input structure None iterations 1 mask None output None border va
10. Erosion Dilation Opening Closing al Dear a Elementary mathematical morphology operations use a structuring element in order to modify other geometrical Structures Let us first generate a structuring element gt gt gt el ndimage generate_binary_structure 2 1 gt gt gt el array False True False True True True False True False dtype bool gt gt gt el astype np int array LO 1 0l DS E s Or 01 e Erosion gt gt gt a np zeros 7 7 dtype np int gt gt gt a 1 6 2 25 9 I gt gt gt a array pp e Oy 0 X 07 0l PO e uc Hs Sb 20s Oks dm Ue nr s Oly OS Or One S tee ps 20S OUI Ores SOL ss sis Ihe Ones EOD Oe Os Tia Er dx 305 QUE o Oa 0r Oy Do Ob Oy gt gt gt ndimage binary erosion a astype a dtype array 0 0 0 U0 0 0 OQ Oy Qs Op 0 0 0 01 9 Ose SO o Dor dior cO Oy O7 XX dy UD Of Ol VO Oy Dip dius UU e 10 07 Ow epo Ore c UOS ORs OE O 0 0 Of 7 507 20 15 gt gt gt Erosion removes objects smaller than the structure 5 10 Image processing scipy ndimage 121 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt ndimage binary_erosion a structure np ones 5 5 astype a dtype array pu 0 C7 0 0 OF XO Or HOw Ogee 0 0r igs 0l lO n d XUL OF Ol Orr O0 Oe Oa D oe SORT Or 0y 0 0 cbe Oy SONIS O OF 0r 07 OC 0 0l O 405 0050 05 us 9 ET
11. Finished Traceback most recent call last Stoplteratrion Contrary to a normal function where executing f would immediately cause the first print to be executed gen is assigned without executing any statements in the function body Only when gen next is invoked by next the statements up to the first yield are executed The second next prints middle and execution halts on the second yield The third next prints finished and falls of the end of the function Since no yield was reached an exception is raised What happens with the function after a yield when the control passes to the caller The state of each generator is stored in the generator object From the point of view of the generator function is looks almost as if it was running in a separate thread but this is just an illusion execution is strictly single threaded but the interpreter keeps and restores the state in between the requests for the next value Why are generators useful As noted in the parts about iterators a generator function is just a different way to create an iterator object Everything that can be done with yield statements could also be done with next methods Nevertheless using a function and having the interpreter perform its magic to create an iterator has advantages A function can be much shorter than the definition of a class with the required next and iter methods What is more important it is easier for the author of the gen
12. First it should be mentioned that there s a number of useful decorators available in the standard library There are three decorators which really form a part of the language e classmethod causes a method to become a class method which means that it can be invoked without creating an instance of the class When a normal method is invoked the interpreter inserts the instance object as the first positional parameter self When a class method is invoked the class itself is given as the first parameter often called cls Class methods are still accessible through the class namespace so they don t pollute the module s names pace Class methods can be used to provide alternative constructors class Array object def init self data self data data Qclassmethod def fromfile cls file data numpy load file return cls data This is cleaner then using a multitude of flags to_ init e staticmethod is applied to methods to make them static i e basically a normal function but acces sible through the class namespace This can be useful when the function is only needed inside this class its name would then be prefixed with _ or when we want the user to think of the method as connected to the class despite an implementation which doesn t require this e property is the pythonic answer to the problem of getters and setters A method decorated with property becomes a getter which is automatically called on attr
13. Ihe rosenbrock function ots returm 5 wind Solo a oo OPII MIN E 2 wu Optimization terminated successfully Current funccvon value 0 000000 Iterations 46 FUNCT LOM evalvationss 9i drca 0025999955697 99996692 13 2 A review of the different optimizers 256 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 13 2 5 Global optimizers If your problem does not admit a unique local minimum which can be hard to test unless the function is convex and you do not have prior information to initialize the optimization close to the solution you may need a global optimizer Brute force a grid search scipy optimize brute evaluates the function on a given grid of parameters and returns the parameters corresponding to the minimum value The parameters are specified with ranges given to numpy mgrid By default 20 steps are taken in each direction gt gt gt def f x The rosenbrock function ud return 5o d ND circ LO aa poc COC imi ewe DE d NE 22 arra 11 00001462 12000015471 Simulated annealing Simulated annealing does random jumps around the starting point to explore its vicinity progressively narrowing the jumps around the minimum points it finds Its output depends on the random number generator In scipy it is implemented in scipy optimize anneal gt gt gt def f x Ihe rosenbrock function return 5 u7 ccA c fcc gt gt gt Opbrmuze annesltr
14. Needs to be done eventually Want to think Come up with a Table of Contents http scipy org Developer Zone UG Toc Ask on communication channels numpy discussion lit Scipy dev list 8 6 Contributing to Numpy Scipy 191 CHAPTER 9 Debugging code author Ga l Varoquaux This tutorial explores tool to understand better your code base debugging to find and fix bugs It is not specific to the scientific Python community but the strategies that we will employ are tailored to its needs Prerequisites e Numpy Python nosetests http readthedocs org docs nose en latest pyflakes http pypi python org pypi pyflakes gdb for the C debugging part Chapters contents Avoiding bugs page 192 Coding best practices to avoid getting in trouble page 192 pyflakes fast static analysis page 193 Running pyflakes on the current edited file page 193 A type as go spell checker like integration page 194 Debugging workflow page 195 Using the Python debugger page 195 Invoking the debugger page 196 x Postmortem page 196 Step by step execution page 197 Other ways of starting a debugger page 199 Debugger commands and interaction page 200 Getting help when in the debugger page 200 Debugging segmentation faults using gdb page 200 9 1 Avoiding bugs 9 1 1 Coding best practices to avoid getting in trouble Brian Kernighan Everyone knows that debugging is twi
15. Worked example Crude periodicity finding 80000 70000 60000 50000 40000 A 30000 20000 10000 1500 1905 1910 1915 1920 300000 250000 200000 150000 100000 50000 Ul 10 15 20 5 4 Fast Fourier transforms scipy fftpack 107 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Worked example Gaussian image blur Convolution Al J dt K t t fol 5 4 Fast Fourier transforms scipy fftpack 108 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 ing image Exercise Denoise moon land m o 58 0 05 0 0 y DES Uu Op o LJ SEE Je yi ODORON m same ate ey oO RR p ds ERR Egos api SOSOSADI DU Sni da e eie 4A tenth Pu AREE brite hood OQ ny AONO OBS aeos POSSE Xt t us End o PE TIDETUR SER SO pion ery Betis Doce SO UR ion mm ONU 9 05 orem Renton gees Sst hore etate OO Dao de dd ao DO 0 26 iQ ose Sous DEG deste eb OOA O00 ES ORIS DRUG D D00040 Y 24 2s SEE nrn 3 gt In 1c Noise ier Transform the Fast Four ise using d to clean up the no 1S exercise We alm th 2 Load the e D lt z D e e c O 2 z D Ke N lt i9 Ban z en c c oN ne e c O oN e i D gt oF D Mem oO e X aa l lab
16. constant sob np hypot sx sy square Sobel x direction Sobel filter Sobel for noisy image 12 5 2 Segmentation gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Histogram based segmentation no spatial information n 10 l 256 im Mew Zeros ily b np random seed 1 pointe dJunpsben dom random 42 N27 imi points lOl saseyoe ioc point sll IN Sask ype mp int s im ndimage gaussian_filter im sigma 1 4 n mask im gt im mean astype np float mask 0 1 im img mask 0 2x np random randn xmask shape hast bin edges no hastogram amg bins 60 bin centers 0 5 bin Jedges 1 bin edges is binary_img img gt 0 5 histogram Use mathematical morphology to clean up the result gt gt gt gt gt gt gt gt gt gt gt gt Remove small white regions open_img ndimage binary_opening binary_img Remove small black hole close_img ndimage binary_closing open_img 12 5 Feature extraction 241 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Check that reconstruction operations erosion propagation produce a better result than opening closing gt gt gt eroded img ndimage binary erosion binary img gt gt gt reconstruct img ndimage bina
17. n SR OD An ill conditionned quadratic function The core problem of gradient methods on ill conditioned problems is that the gradient tends not to point in the direction of the minimum We can see that very anisotropic ill conditionned functions are harder to optimize 13 2 A review of the different optimizers 251 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Take home message conditioning number and preconditioning If you know natural scaling for your variables prescale them so that they behave similarly This is related to preconditioning Also it clearly can be advantageous to take bigger steps This is done in gradient descent code using a line search Table 13 2 Adaptive step gradient descent iterations function calls Error on f x S O 20 40 60 80 100 120 140 A well conditionned quadratic function iterations function calls Error on f x 5 E s O 200 400 600 800 100012001400 An ill conditionned quadratic function Error on f x An ill conditionned non quadratic function An ill conditionned very non quadratic function The more a function looks like a quadratic function elliptic iso curves the easier it is to optimize Conjugate gradient descent The gradient descent algorithms above are toys not to be used on real problems As can be seen from the above experiments one of the problems of the simple gr
18. one two red blue In 105 slicer rhyme beo oue TOSE I qe a e eS cUxqeems ASA In 106 slicer rhyme start 1 stop 4 step 2 Sone MESIE E e eu a a The order of the keyword arguments does not matter In 107 slicer rhyme step 2 start 1 stop 4 cue USUS ere ES uat ue ES but it is good practice to use the same ordering as the function s definition Keyword arguments are a very convenient feature for defining functions with a variable number of arguments especially when default values are to be used in most calls to the function 2 4 4 Passing by value Tip Can you modify the value of a variable inside a function Most languages C Java distinguish passing by value and passing by reference In Python such a distinction is somewhat artificial and it is a bit subtle whether your variables are going to be modified or not Fortunately there exist clear rules Parameters to functions are references to objects which are passed by value When you pass a variable to a function python passes the reference to the object to which the variable refers the value Not the variable itself If the value passed in a function is immutable the function does not modify the caller s variable If the value is mutable the function may modify the caller s variable in place 2 gt gt def try Lo modi xus Va Z x 23 y append 42 z 99 new reference print x print y print z gt g
19. type numpy into4 elements in COOrdinate format shape 4 a row col shape 4 4 2 219 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 indptr points to row starts in indices and data x lengthis n_row 1 last item number of values length of both indices and data x nonzero values of the i th row are data indptr i indptr i 1 with column indices indices indptr i indptr itl x item i j can be accessed as data indptr i k where k is position of j in indices izndptr i andptr rzt1 subclass of cs matrix common CSR CSC functionality subclass of data matrix sparse matrix classes with data attribute fast matrix vector products and other arithmetics sparsetools constructor accepts dense matrix array sparse matrix shape tuple create empty matrix data ij tuple data indices indptr tuple efficient row slicing row oriented operations slow column slicing expensive changes to the sparsity structure use actual computations most linear solvers support this format Examples create empty CSR matrix gt gt gt mtx sparse csr matrix 3 4 dtype np int8 gt gt gt mtx todense t Mere asco uc p a LO Qo Us D LO 0 07 Olle sib ypesrmbsg create using data ij tuple gt gt gt COW Mp array MOT cL Ze e gt gt gt Col Mp m co qb 2a Oo hs c5 gt gt gt data np array ll d 9
20. 0 399 0 25 D 0442 B 192 and mlab axes extent If we specified extents for a plotting object mlab outline Warning don t get them by default 18 2 Interactive work Tip The quickest way to create beautiful visualization with Mayavi is probably to interactively tweak the various settings 18 2 1 The pipeline dialog Click on the Mayavi button in the scene and you can control properties of objects with dialogs Mayavi pipeline 1 RG O Be Pipeline Scalar LUT Vector LUT ModuleManager m v E Mayavi Scene 1 LUT Look Up Table Manager Lut mode gist_earth Mayavi Sce riIHnRNMHM OAS v GridSource v PolyDataNormals EN VY Colors and legends Number of colors 256 m Surface m Outline Reverse lut O Axes Edit LUT properties 3 v GridSource v 4 PolyDataNormals v 99 Colors and legends Show legend m Surface e ii m Title Number of labels 0 u 64 Shadow Use default name v Data name scalars Launch LUT editor Edit bar Title Edit bar Text Edit bar Actor Edit bar Widget e Set the background of the figure in the Mayavi Scene node e Set the colormap in the Colors and legends node Right click on the node to add modules or filters 330 18 2 Interactive work Python Scientific lecture not
21. 11 3 3 Eigenvalue Problem Solvers The eigen module arpack acollection of Fortran77 subroutines designed to solve large scale eigenvalue problems e lobpcg Locally Optimal Block Preconditioned Conjugate Gradient Method works very well in com bination with PyAMG example by Nathan Bell m m Compute eigenvectors and eigenvalues using a preconditioned eigensolver In this example Smoothed Aggregation SA is used to precondition the LOBPCG eigensolver on a two dimensional Poisson problem with Dirichlet Doundary conditions wee import scipy from scipy sparse linalg import lobpcg from pyamg import smoothed_aggregation_solver from pyamg gallery import poisson 100 9 pouwssonqd c NV format wear create the AMG hierarchy ml smoothed aggregation solver A initial approximation to the K eigenvectors X scipy rand A shape 0 K preconditioner based on ml M ml aspreconditioner compute eigenvalues and eigenvectors with LOBPCG W V lobpcg A X M M tol 1e 8 largest False plot the eigenvectors import pylab pylab figure figsize 9 9 for i in range kh xeon SURO ie o r o Fl pylab title Eigenvector d 1 Dylab r color lt 2 2reshape N N pylab axis equal pysabudoms C ik pylab show examples pyamg with lobpcg py example by Nils Wagner examples lobpcg sakurai py output 11 3 Linear System Solvers 228 Python Scientific lecture notes Releas
22. As with the previous compiled Numpy examples we need the include dirs option 14 5 Cython 278 i ls r unning build ext cythnoning cos doubles pyx to buatadang cos doubles creating build Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 leos doubles c cos doubles lt h python setup py build ext i extens Llon _ COS doubles spy Creating build tempe lanux xe6_ 64 2 7 cos doubles e Gec pthread fno strice aliacing eg 02 DNDEBUG 9 lm cile ancluded ls Ibuild cos doub from home esc anaconda lib python2 from home esc anaconda lib python2 from home esc anaconda lib python2 From cos coubles c 253 les c cos_doubles c eos doubles h setup py test_cos_doubles py Emu ptypes fPIC 7 site packages numpy core include numpy nda 7 site packages numpy core include numpy nda 7 site packages numpy core include numpy arri pere ee ore a D 7 site packages numpy core include numpy npy deprecated api h 11 2 home esc anaconda lib python2 7 site packages numpy core include numpy ufunc api h 236 warnin Mice CER bead Me sertce aliasing G O2 ONDEBUG G uds suu Weertee proeotypes fPIC gcc penread shared build temp lanux x36 64 2 7 cos doubles 6 DEN c uU c4 2 7 cos d _cos_doubles pyx cos_doubles o x setup py And as before we convince ourselves that it worked
23. What are Numpy and Numpy arrays page 43 Reference documentation page 44 Import conventions page 44 Creating arrays page 44 Functions for creating arrays page 45 Basic data types page 46 Basic visualization page 47 Indexing and slicing page 49 Copies and views page 52 Fancy indexing page 53 3 1 1 What are Numpy and Numpy arrays Python objects high level number objects integers floating point containers lists costless insertion and append dictionaries fast lookup Numpy provides extension package to Python for multi dimensional arrays closer to hardware efficiency designed for scientific computation convenience Also known as array oriented computing gt gt gt import numpy as np gt gt gt d nparray I0 lus 27 21 gt gt gt a array 0 I 1p For example An array containing 43 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 values of an experiment simulation at discrete time steps signal recorded by a measurement device e g sound wave pixels of an image grey level or colour 3 D data measured at different X Y Z positions e g MRI scan Why it is useful Memory efficient container that provides fast numerical operations In 1 L range 1000 in I2 Stumext S292 for i xn lj 1000 loops best of 3 403 us per loop In 3 a np arange 1000 In 4 t xmect 392 100000 Loops best vor 3
24. dtype bool Logical operations gt gt gt a np array l 1 0 0 dtype bool gt gt gt b np array 1 0 1 0 dtype bool poc Wy LOG Meador ai D array True True True False dtype bool sz Ne Logical anda D array True False False False dtype bool Transcendental functions gt gt gt a np arange 10 gt gt gt Np Sam a cues 0 p 1029414373095 O 909Z29743 1 D41120005 0 7968025 y 0 959692421 DISPOMIS5 969099600 0 995959592575 0 4121184971 gt gt gt Hs Og a Guuds SPI inE T r Delete ie NOB 29 ShaxsopAOG O7 l5094599T12 deorop SLLIOdS9TDES 0079441545 db de I gt gt gt np exp a acta lI O00e0 Cote 00 27T9529193eT700 725990560 L0eT00 2500995509591 a490 de 00S 0 MN 464 031598702 4 03 42287 93e 02 1529005195 3 Ge 7 03 Ze USO 207 0 by Sod 0909 29 05 3 2 Numerical operations on arrays 56 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Shape mismatches gt gt gt a np arange 4 gt gt gt a np array 1 219 Traceback most recent call last Pitte lt cedin lineae d ane lt mocule gt ValueError operands could not be broadcast together with shapes 4 2 Broadcasting We ll return to that ater page 61 Transposition a NO eriuinp ones 3 3 1 see help np triu gt gt gt a ara i 0s lees qose o que Ecl isse Oey Oe gt gt gt a T usua ch C
25. f NOTES Enver o at the apdb gt prompt to start your script gt Strimg gt 1 lt module 1 Set a break point at line 34 using b 34 ted m gt home varoquau dev scipy lecture notes advanced debugging optimizing wiener filtering py 4 B l gt 42 import numpy as mp gt import SIG as Sp ipdb gt b 34 Breakpoint 2 at home varoquau dev scipy lecture notes advanced debugging optimizing wiener f Continue execution to next breakpoint with c ont inue Spb e home varoquau dev scipy lecture notes advanced debugging optimizing wiener filtering py 34 38 MO Z4 noisy img Noisy Img 35 denoised_img local_mean noisy_img size size Using the Python debugger 197 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e Step into code with n ext and s tep next jumps to the next statement in the current execution context while step will go across execution contexts i e enable exploring inside function calls ipdb gt s gt home varoquau dev scipy lecture notes advanced debugging optimizing wiener filtering py 35 2 34 noisy img noisy img gt 35 denoised img local mean noisy img size size 36 l var local var noisy img Size size ioe Ta gt home varoquau dev scipy lecture notes advanced debugging optimizing wiener filtering py 3 35 denoised_img local_mean noisy_img size size gt 36 l_var local_var noisy_img size size 27 for i in Gamage 3 e Step a
26. from skimage import data from skimage import filter camera data camera val filter threshold otsu camera mask camera lt val 7000 6000 5000 4000 3000 2000 1000 00 50 100 150 200 250 300 Labeling connected components of a discrete image Tip Once you have separated foreground objects it is use to separate them from each other For this we can assign a different integer labels to each one Synthetic data gt gt gt n 20 gt gt gt 1 256 gt gt gt im np zeros 1 1 gt gt gt points JIenp random random 2 mx Z mltpornts 0l astvpe np rnt Points IN astype np int 1 gt gt gt im ndimage gaussian_filter im sigma 1 4 xxn gt gt gt blobs im gt im mean Label all connected components gt gt gt all_labels morphology label blobs Label only foreground connected components gt gt gt blobs labels morphology label blobs background 0 16 4 Image segmentation 299 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 See also scipy ndimage find objects is useful to return slices on object in an image 16 4 2 Marker based methods If you have markers inside a set of regions you can use these to segment the regions Watershed segmentation The Watershed skimage morphology watershed is aregion growing approach that fills bassins in the image gt gt gt from skimage morphology
27. np ma array I 2 3 Aly mask 0 1 1 d gt gt gt x ty masked array data I mask False True True True filbevalue 999999 Masking versions of common functions possnnt Ea Masked array data gt LoQ 1241421856237 mask False True False True fill value 1e 20 Note There are other useful array siblings page 185 While it is off topic in a chapter on numpy let s take a moment to recall good coding practice which really do pay off in the long run Good practices Explicit variable names no need of a comment to explain what is in the variable e Style spaces after commas around etc A certain number of rules for writing beautiful code and more importantly using the same conven tions as everybody else are given in the Style Guide for Python Code and the Docstring Conventions page to manage help strings Except some rare cases variable names and comments in English 3 4 Advanced operations 34 Advanced operations 70 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Section contents Polynomials page 71 Loading data files page 73 3 4 1 Polynomials Numpy also contains polynomials in different bases For example 3r 2x 1 soo p Mprpolyild is 27 gt gt gt p 0 1 DEO DIOS EP SA eS B 99959393 gt gt gt p order 2 gt gt gt x np linspace 0 1 20 gt gt gt y
28. year lt 1910 year gt 1917 amp year lt 1918 gt gt gt means and and l means or gt gt gt populations bad_years 0 np ma masked gt gt gt populations bad_years 1 np ma masked gt gt gt populations mean axis 0 masked vartray data 40472 7272 27 1862722727273 4240020 mask False False False fill value 1e 20 gt gt gt populations std axis 0 masked_array data IO o EO oU I SG Pc oo geom mask False False False l1e 20 fill value Note that Matplotlib knows about masked arrays gt gt gt puspioutveatrupopuldm tomsy oe kmat ploc lib lines Line D Obe CE 2b 624 241 80000 70000 60000 50000 40000 A 30000 20000 10000 1800 1905 1910 1915 1920 8 4 Array siblings chararray maskedarray matrix 187 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 8 4 3 recarray purely convenience ee Aer Darry la ar ue QUIS gs de yoe 4 ese 7 vue Oy Em p gt gt gt arr2 arr view np recarray gt gt gt arr2 x chararccay I a sump dtype S1 gt gt gt arrzZ y abray l 21 8 4 4 matrix convenience always 2 D e x is the matrix product not the elementwise one po o mnpemedsmae se Olly S00 Eq y ree erus rae aieo piel 22 57 isis seen iremos be GT uos pt 3 aly 8 5 Summary e Anatomy of the ndarray data dtype strides Universal function
29. 1 unspecified 1 value is inferred 4 5 1 Warning ndarray reshape may return a view cf help np reshape or copy Tip gt gt gt b 0 0 99 gt gt gt a abray oo 2o Slap EC Oe old Beware reshape may also return a copy 3 2 Numerical operations on arrays 64 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt a np zeros 3 2 gt gt gt b a T reshape 3 2 gt gt gt b 0 9 gt gt gt a chere chr QNO T CIs Oe Waly lo dd To understand this you need to learn more about the memory layout of a numpy array Adding a dimension Indexing with the np newaxis object allows us to add an axis to an array you have seen this already above in the broadcasting section s gt c apar ray il 25 1 gt gt gt Z arrar quA 252 wt nDpsnewsods BU 2 ape array gt gt gt z np newaxis array Mos 1 Dimension shuffling gt gt gt a np arange 4 3 2 reshape 4 3 2 gt gt gt a shape 25 32 gt gt gt al0 2 1 gt gt gt b a transpose 1 2 0 gt gt gt b shape Sy 2h lt 4 gt gt gt DIZ IF b 5 Also creates a view s p2 lp 0 lt 1 posce 2 1 zd Resizing Size of an array can be changed with ndarray resize gt gt gt a np arange 4 gt gt gt gcresrze 8 gt gt gt a arro y HL de 3 Sx um 05 d ON However it must not be referred to somewhere
30. 2 2 fprime fprime Optimization terminated successfully Current function value 0 000000 iteratvons 3 Funct von evaluations 30 Gradient evaluations 30 array Or 99993199 0499997536 Note that the function has only been evaluated 30 times compared to 120 without the gradient 13 2 3 Newton and quasi newton methods Newton methods using the Hessian 2nd differential Newton methods use a local quadratic approximation to compute the jump direction For this purpose they rely on the 2 first derivative of the function the gradient and the Hessian 13 2 A review of the different optimizers 253 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 An ill conditionned quadratic function Note that as the quadratic approximation is exact the Newton method is blazing fast An ill conditionned non quadratic function 1 ELI A Here we are optimizing a Gaussian which is always below its quadratic approximation As a result the Newton method overshoots and leads to oscillations An ill conditionned very non quadratic function In scipy the Newton method for optimization is implemented in scipy optimize fmin nocg cg here refers to that fact that an inner operation the inversion of the Hessian is performed by conjugate gradient scipy optimize fmin tnc can be use for constraint problems although it is less versatile gt gt gt def f x Ihe rosenbrock
31. 2 4 Defining functions 25 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 2 4 7 Docstrings Documentation about what the function does and its parameters General convention In 67 def funcname params Om Concise one Iine sentence describing the function e Extended summary which can contain multiple paragraphs T m mm EA f function body pass In 68 funcname Type unctaon Base Class type Tunction gt String Form function funcname at Oxeaa0f0 gt Namespace Interactive File lt ipython console gt Definition funcname params D cscring Concise one line sentence describing the function Extended summary which can contain multiple paragraphs Note Docstring guidelines For the sake of standardization the Docstring Conventions webpage documents the semantics and conventions associated with Python docstrings Also the Numpy and Scipy modules have defined a precise standard for documenting scientific func tions that you may want to follow for your own functions with a Parameters section an Examples section etc See http projects scipy org numpy wiki CodingStyleGuidelines docstring standard and http projects scipy org numpy browser trunk doc example py L37 2 4 8 Functions are objects Functions are first class objects which means they can be assigned to a variable an item in a list or any collection passed as an argument
32. 4 N m gt cviscous 0 4 is eS m so the system will be underdamped because gt gt gt eps Cviscous 7 2 x mass np osqrt kspring mass gt gt gt Coe 1 Crue 5 8 Numerical integration scipy integrate 117 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 For the scipy integrate odeint solver the 2nd order equation needs to be transformed in a system of two first order equations for the vector Y y y It will be convenient to define nu 2 eps wo c mandom wo 2 k m gt gt gt U Coe NM VM eo SESS gt gt gt om coef kspring mass Thus the function will calculate the velocity and acceleration by gt gt gt def calc deri yvec time nuc omc return yvec 1 nuc x yvec 1 omc yvec 0 gt gt gt time vec np linspace 0 10 100 gt gt gt yarr odeint calc deri 1 0 time vec args nu coef om coef The final position and velocity are shown on the following Matplotlib figure 0 2 4 6 8 10 There is no Partial Differential Equations PDE solver in Scipy Some Python packages for solving PDE s are available such as fipy or SfePy 5 9 Signal processing scipy signal gt gt gt from scipy import signal e scipy signal detrend remove linear trend from signal t np lrmspacet t0 5 100 x t np random normal size 100 pl plot t x linewidth 3 pl plot t signal detrend x linewidth 3 5 9 Signal proce
33. 9 20 ps pritoplotio y line plot matplotlib rines LiIne2D ObDJect si S s plt plot 0e ya o s dot plot Smatplorpiiborrnescngmeespoobyect al lt gt 3 0 0 5 1 0 1 5 2 0 2 5 3 0 2D arrays such as images gt gt gt image np random rand 30 30 gt gt gt plt imshow image cmap plt cm hot Poe DIE veCOlorbar Mat ploviip colorbareColorbar instance eu aea 3 1 The Numpy array object 48 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 20 25 See also More in the matplotlib chapter Exercise Simple visualizations Plot some simple arrays Try to use both the Python shell and the notebook if possible Try using the gray colormap 3 1 8 Indexing and slicing The items of an array can be accessed and assigned to the same way as other Python sequences e g lists gt gt gt a np arange 10 gt gt gt a array ui a 0 0 2 9 Warning Indices begin at 0 like other Python sequences and C C In contrast in Fortran or Matlab indices begin at 1 The usual python idiom for reversing a sequence is supported For multidimensional arrays indexes are tuples of integers 3 1 The Numpy array object 49 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt a np diag np arange 3 gt gt gt a array Tios Os Oi O cO ZA gt gt gt a l 1 il gt gt gt a 2 1 10 thir
34. 9 4 Debugging segmentation faults using gdb If you have a segmentation fault you cannot debug it with pdb as it crashes the Python interpreter before it can drop in the debugger Similarly if you have a bug in C code embedded in Python pdb is useless For this we turn to the gnu debugger gdb available on Linux Before we start with gdb let us add a few Python specific tools to it For this we add a few macros to our gbdinit The optimal choice of macro depends on your Python version and your gdb version I have added 9 4 Debugging segmentation faults using gdb 200 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 a simplified version in gdbinit but feel free to read Debugging WithGdb To debug with gdb the Python script segfault py we can run the script in gdb as follows S iodo python gdb run segftault py Starting program usr bin pytnon Sseqrault py Thread debugging using libthread_db enabled Program received signal SIGSEGV Segmentation fault _strided_byte_copy dst 0x8537478 360 343G outstrides 4 src 0x86c0690 Address 0x86c0690 out of bounds instrides 32 N 3 elsize 4 at mumey Core src muliiarray ClrOrs C2365 565 EAST MOVE INES 2 gdb We get a segfault and gdb captures it for post mortem debugging in the C level stack not the Python call stack We can debug the C call stack using gdb s commands gdb up 1 Ox004af4f5 in copy from same shape dest lt value optimi
35. Advantages Requires no additional libraries Lots of low level control Entirely usable from C Disadvantages May requires a substantial amount of effort Much overhead in the code Must be compiled High maintenance cost No forward compatibility across Python versions as C Api changes Note The Python C Api example here serves mainly for didactic reasons Many of the other techniques actually depend on this so it is good to have a high level understanding of how it works In 9946 of the use cases you will be better off using an alternative technique 14 2 1 Example The following C extension module make the cos function from the standard math library available to Python je Example ol Wrapping Cos funcsTon from Mach with he Python C Ari m fincilude lt Python h gt l OC ude sme 14 2 Python C Api 264 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 wrapped cosine function static PyObject cos func PyObject sel EvObgeobw args double value double answer parse the input from python float to c double if PyArg ParseTuple args d amp value return NULL if the above function returns 1 an appropriate Python exception will have been set and the function simply returns NULL fr callucos from Tibi 77 answer cos value ve COMSEIUCE Coe OutDub Tron Cog Irom C double Lo pyEnom float x return Py BuildValue f answer w define fu
36. CO Lorbar Ul UJ NJ IM Remark the numpy ogrid function allows to directly create vectors x and y of the previous example with two significant dimensions DO a Ae c unpoocdgauop0 s5y 075 gt gt S y array ItO 1 Te Foy lwo array Cio qu cu gt gt gt x shape y shape dm le el Eu gt gt gt distance np sqrt x 2 y 2 1 2 3 Tip So np ogrid is very useful as soon as we have to handle computations on a grid On the other hand np mgrid directly provides matrices full of indices for cases where we can t or don t want to benefit from broadcasting 3 2 Numerical operations on arrays 63 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt x array pO 07 0 Ol el ee alee Mle DA C Ee Loe Oe Se Si gt gt gt y abray n y F So ero PPR e D NO i N C W U w 3 2 4 Array shape manipulation Flattening aoe ug a ae p 3 Uds by se gt gt gt a ravel abray ily 2 be Sw 61 gt gt gt a T array qb cw 27 UE 555 Sly 1 gt gt gt a T ravel arcan bled 2 SaS 1 Higher dimensions last dimensions ravel out first Reshaping The inverse operation to flattening gt gt gt a shape 27 5 gt gt gt b a ravel gt gt gt b b reshape 2 3 gt gt gt b arca e 32 Ay 2a vould Or gt gt gt a reshape gigs Gi lily S 6 2
37. Default 6 vmax vmax is used to scale the colormap If None the max of the data will be used vmin vmin is used to scale the colormap If None the min of the data will be used 18 1 Mlab the scripting interface 328 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Example import numpy as np Cy Cheta npe marrid nO TO mpg pops 93 E x np cos theta ie passim olive tal nec nnus from mayavi import mlab mdabmesh x yr Z7 COlormap gist carth e tent O0 y ds 0 T lt mayavi modules surface Surface object at Oxdeof08c mMlabsemesh x vy Zp extenEt 0 d 0 1 0 d representation wireframe line width 1 color 0 5 0 5 0 5 lt mayavi modules surface Surface object at Oxdd6a71c Decorations Tip Different items can be added to the figure to carry extra information such as a colorbar or a title in 9 mlab colorbar Out 7 Sorrentatton vertical Que 9 lt tvek classes scalar bar coctoro calanBabActor object st xdo97f90 In 10 mlab title polar mesh Out 10 enthought mayavi modules text Text object at Oxd8ed38c gt En 11 imlab cuclane Out 7 Out LI lt encehought mayavi modules cutline Outlane object at Oxdo21b6ce In 12 mlab axes Out 7 Out 12 enthought mayavi modules axes Axes object at Oxd2e4bcc 18 1 Mlab the scripting interface 329 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 l 60e 16 0 847
38. Dilation gt gt gt a np zeros 5 5 aro a a 2 2 gt gt gt a array all gt Oley OR Oma Oma 1 Dus bes dO Os l Xue dus dons Dar is Oe Way in JOE 15 D Xu se Ory 0 19 gt gt gt ndimage binary dilation a astype a dtype Gn o dU y C es e co ore M Cb array M 057 om On c w EO Oia E nn Xon leg cba Hey sd L Dur Oey es Ow db l dee dus e JUD 11 Opening gt gt gt a np zeros 5 5 dtype np int Soo sg pb pj qd 24 gt gt gt a array Ilo Qu Ol EOS ibs AE ila Ole rS x Ee eios 0e Ute SRI SE e SOA Op wv SO TOU oh gt gt gt Opening removes small objects gt gt gt ndimage binary_opening a structure np ones 3 3 astype np int array LIO 07 07 0 Ol PO sly E OH Od MO b Se e vL uo dee fle Soc 9 Os Ona Op 105 JOLT gt gt gt Opening can also smooth corners gt gt gt ndimage binary opening a astype np int array PIE 07 07 07 Ol OPO OO CO O Og Wi Nh dn ds Or 20 10 SOL Op Closing ndimage binary_closing Exercise Check that opening amounts to eroding then dilating An opening operation removes small structures while a closing operation fills small holes Such operations can therefore be used to clean an image gt gt gt a np zeros 50 50 poo wIL9s hO0 dqseq0 s gt gt gt a t 0252p candom srandard normal aspe 5 10 Image processing scipy ndimage 122 Python Scientific lec
39. E O m Way ore ey model a gt gt gt plt legend waveform model gt gt gt plt show Remark from scipy v0 8 and above you should rather use scipy optimize curve fit which takes the model and the data as arguments so you don t need to define the residuals any more 5 11 Summary exercises on scientific computing 130 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Going further e Try with a more complex waveform for instance data waveform_2 npy that contains three signif icant peaks You must adapt the model which is now a sum of Gaussian functions instead of only one Gaussian peak Intensity bins 0 10 20 30 AQ 50 60 70 80 Time ns n some cases writing an explicit function to compute the Jacobian is faster than letting 1eastsq esti mate it numerically Create a function to compute the Jacobian of the residuals and use it as an input for leastsq When we want to detect very small peaks in the signal or when the initial guess is too far from a good solution the result given by the algorithm is often not satisfying Adding constraints to the parameters of the model enables to overcome such limitations An example of a priori knowledge we can add is the sign of our variables which are all positive With the following initial solution gt gt gt x0 np array 3 90 20 1 dtype float compare the result of scipy optimize leastsq and what you can get with scipy optimi
40. Eswrite Tits ae a bese nand another tect gt gt gt f close To read from a file In 1 f open workfile r In 2 s osse cci In 3 print s Those A test and another test In 4 f close For more details http docs python org tutorial inputoutput html 2 6 1 Iterating over a file In 6 f open workfile r In for line zn f print line 26 Input and Output A Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Tais LS a CEST and another test In IS t e6lose File modes Read only r Write only w Note Create a new file or overwrite existing file Append a file a Read and Write r Binary mode b Note Use for binary files especially on Windows 2 Standard Library Note Reference document for this section The Python Standard Library documentation http docs python org library index html Python Essential Reference David Beazley Addison Wesley Professional 2 7 1 os module operating system functionality A portable way of using operating system dependent functionality Directory and file manipulation Current directory In 17 os getcwd Out l17 e f7Jgsetrs cDurns sroc scrpy200S9 serpy 2009 tutorial source List a directory Ln 131 os listeli r os cur dir Cou 31 ns In ondes rst swo 7 7 Dyenon language r St Sw View duda spy SW y hes udie s templates
41. Hydraulic head m Power of the turbines MW e Minimal and maximal release m3 s Efficiency of the turbines The reservoir has a known behaviour One part is related to the energy production based on the water released A simple formula for approximating electric power production at a hydroelectric plant is P ohrgk where P is Power in watts pis the density of water 1000 kg m3 e his height in meters r is flow rate in cubic meters per second g is acceleration due to gravity of 9 8 m s2 e k is a coefficient of efficiency ranging from 0 to 1 Tip Annual electric energy production depends on the available water supply In some installations the water flow rate can vary by a factor of 10 1 over the course of a year The second part of the behaviour is the state of the storage that depends on controlled and uncontrolled parameters storagez41 storage inflows release spillage irrigation 17 3 What are Traits A trait is a type definition that can be used for normal Python object attributes giving the attributes some additional characteristics Standardization nitialization Validation Deferral Notification Visualization Documentation A class can freely mix trait based attributes with normal Python attributes or can opt to allow the use of only a fixed or open set of trait attributes within the class Trait attributes defined by a class are automatically inheri
42. Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Chapter contents Life of ndarray page 160 It s page 160 Block of memory page 161 Data types page 162 Indexing scheme strides page 167 Findings in dissection page 173 Universal functions page 173 What they are page 173 Exercise building an ufunc from scratch page 175 Solution building an ufunc from scratch page 178 Generalized ufuncs page 181 Interoperability features page 182 Sharing multidimensional typed data page 182 The old buffer protocol page 182 The old buffer protocol page 183 Array interface protocol page 184 Array siblings chararray maskedarray matrix page 185 chararray vectorized string operations page 185 masked_array missing data page 185 recarray purely convenience page 188 matrix convenience page 188 Summary page 188 Contributing to Numpy Scipy page 188 Why page 188 Reporting bugs page 188 Contributing to documentation page 189 Contributing features page 190 How to help in general page 191 8 1 Life of ndarray 8 1 1 It s ndarray block of memory indexing scheme data type descriptor raw data how to locate an element how to interpret an element 8 1 Life of ndarray 160 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 array scalar iie ET ndarray t
43. Str max storage Float le6 desc Maximal storage hm3 max release Float 10 desc Maximal release m3 s 17 3 What are Traits 319 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 head Float 10 desc Hydraulic head m efficiency Range 0 1 irrigated areas List IrrigationArea def energy_production self release Returns the energy production Wh for the given release m3 s power 1000 x 9 81 self head release x self efficiency return power x 3600 traits view View Item name ieem max storage Item max_release Item head Item efficiency Item irrigated areas resizable True if name moan ae upper block IrrigationArea name Section C surface 2000 crop Wheat reservoir Reservoir name Project A max_storage 30 max_release 100 0 head 60 efficiency 0 8 irrigated areas upper block release 80 print Releasing m3 s produces 1 kWh format release reservoir energy production release Trait listeners can be used to listen to changes in the content of the list to e g keep track of the total crop surface on linked to a given reservoir from traits api import HasTraits Str Float Range Enum List Property from traitsui api import View Item class IrrigationArea HasTraits name Str surface Float desc Surface ha erop e Enum Alitalia Wh
44. a nb arrdv llg 2 37 4 gt gt gt a 1 abiay 2 So 47 5 gt gt gt 2x a arccay Ii 2 4 oe 16l All arithmetic operates elementwise gt gt gt b np ones 4 1 gt gt gt a b anra Li as doe Zui gt gt gt ax Db anman Ea 4 SUMA oem gt gt gt J np arange 5 itd by c s array I 2 Bn Oy dle cel These operations are of course much faster than if you did them in pure python gt gt gt a np arange 10000 gt gt gt Stimeit a 1 20000 Loops best of SG 24 3 us per loop gt gt gt 1 range 10000 gt gt gt timeit itl for i in 1 LOO0 Woops best Of 27 86 Us per loop 3 2 Numerical operations on arrays 55 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Warning Array multiplication is not matrix multiplication gt gt gt c np ones 3 3 gt gt gt C de 7 NOU Matrix mMu ulliplication anran i de der die lier Lie S HR IR Db hec bw ox codot e arrosa sce ber doa ly or tar 49d cm NE cr MP Exercise Elementwise operations Try simple arithmetic elementwise operations e Time them against their pure python counterparts using St imeit Try using dot Generate 2 0 Z2x x1 2 x2 Z x3 2x x4 aj 2 3 3 j Other operations Comparisons soc Noverray th 2 3 x 229 Mpcarray 47 4 72 m1 DRM array False True False True dtype bool gt gt gt a b array False False Irue False
45. but for 2 D arrays Note that for the interp family the computed time must stay within the measured time range See the sum mary exercise on Maximum wind speed prediction at the Sprog station page 124 for a more advance spline interpolation example 5 8 Numerical integration scipy integrate The most generic integration routine is scipy integrate quad gt gt gt from scipy integrate import quad poc aes xem Guedi nipszsiny app gt gt gt np allclose res 1 True gt gt gt np allcolose err l1 res Prue Others integration schemes are available with ixed_quad quadrature romberg scipy integrate also features routines for integrating Ordinary Differential Equations ODE In particular scipy integrate odeint isa general purpose integrator using LSODA Livermore Solver for Ordinary Differential equations with Automatic method switching for stiff and non stiff problems see the ODEPACK Fortran library for more details odeint solves first order ODE systems of the form dy dt rhs yl y2 t0 As an introduction let us solve the ODE dy dt 2ybetweent 0O 4 with the initial condition y t O 1 First the function computing the derivative of the position needs to be defined gt gt gt def calc_derivative ypos time counter_arr counter arr l 5 8 Numerical integration scipy integrate 116 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 return
46. def wake up watchman object name new pass def wake up watchman object name old new pass Removing a dynamic listener can be done by calling the remove trait listener method on the trait with the listener method as argument calling the on trait change method with listener method and the keyword remove True deleting the instance that holds the listener Listeners can also be added to classes using the on trait change decorator from traits api import HasTraits Instance DelegatesTo Float Range from traits api import Property on trait change from reservoir import Reservoir class ReservoirState HasTraits Keeps track of the reservoir state given the initial storage For the simplicity of the example the release is considered in hm3 timestep and noc in m3 s n m m reservoir Instance Reservoir 05 max storage DelegatesTo reservoir min_release Float max_release DelegatesTo reservoir state attributes storage Property depends_on inflows release Xx controd Bal ributes int lows Float desc Intlows Tams release Range low min_release high max_release 17 3 What are Traits 318 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 spillage Property desc Spillage hm3 depends_on storage inflows release Private traits FHFFETEFEEEEEEEEEEE EERE EEE EET EEE EE HEE EEE _storage Float
47. eC Ol IB e S gt gt gt mtx todense Metrix EE L Dr or OF Ol O Z 8 0 0 u O 0 3 9 O 0 O O E 10 LO B lt 0 Np Slay gt gt gt rhs np array 1 2 3 47 51 solve as single precision real gt gt gt mtxl mtx astype np float32 gt gt gt x dsolve spsolve mtxl rhs use_umfpack False gt gt gt print x Ly AO 1 Po ES Me gt gt gt Prine Error 9 Imes ge x ris Erco I dies e c D oce solve as double precision real 11 3 Linear System Solvers 225 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt mtx2 mtx astype np floato4 gt gt gt x dsolve spsolve mtx2 rhs use_umfpack True gt gt gt print x pose FOU PE EX Eug M ao print Error Me ME cx ee E Eu reer OF 0 x om solve as single precision complex gt gt gt mtxl mtx astype np complex6 4 gt gt gt x dsolve spsolve mtxl rhs use_umfpack False gt gt gt print x LOCO FOs Za 0 55s sud 5903 WOO ee gt gt gt print Error 5 Merl a Be hs Error 0 0 0 0 0 60 3 Q 0 3 0240 7 solve as double precision complex gt gt gt mtx2 mtx astype np complex128 gt gt gt x dsolve spsolve mtx2 rhs use_umfpack True gt gt gt print x i JUS Oey sq Deeg Oras Se 30 1 040 3 27 gt PLINE Error T MEZ iX rhe Error IDEO oss Ose Oe 39 ge O m Construct a 1000x1000 1il matrix and add some values to
48. euroscipy 2013 Traits property implementation Htt HHH eHHe HHA HEAP EAP EEE ETE EF _get_storage self new storage self storage self release self inflows return min new storage self max storage Set storage self storage value self storage storage value get spillage self new storage self storage self release self inflows overflow new storage self max storage return max overflow 0 print_state self print Storage tRelease tInflows tSpillage otr format VNE gor pe TRI for ban range 4 print str format format self storage self release self inflows self spillage Prine a 79 if name main projectA Reservoir name Project A Jy o max_storage 30 max_release 5 hydraulic_head 60 efficiency 0 8 ReservoirState reservoir projectA storage 25 release 4 inflows print staten COn igure traits FS AU Edit properties Name Project A Storage 21 0 Spillage 0 Inflows 0 0 Release 0 0 5 0 4 0 Some use cases need the delegation mechanism to be broken by the user when setting the value of the trait The PrototypeFrom trait implements this behaviour from traits api import HasTraits Str Float Range PrototypedFrom Instance class Turbine HasTraits turbine type Str 17 3 What are Traits 315 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 power Float 1 0 desc Maximal power de
49. gt gt Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 return granulo np random seed 1 n 10 1 256 im np zeros 1 17 Points lanp rendom random 2 ees 2 im pommes lOs ast y reno int pounes ll Jastyoe mp same I im ndimage gaussian_filter im sigma 1l 4 x n mask im gt im mean granulo granulometry mask sizes np arange 2 19 4 4 6 8 10 12 14 16 18 12 6 Measuring objects properties ndimage measurements 246 CHAPTER 13 Mathematical optimization finding minima of functions authors Ga l Varoquaux Mathematical optimization deals with the problem of finding numerically minimums or maximums or zeros of a function In this context the function is called cost function or objective function or energy Here we are interested in using scipy optimize for black box optimization we do not rely on the mathe matical expression of the function that we are optimizing Note that this expression can often be used for more efficient non black box optimization Prerequisites e Numpy Scipy Python e matplotlib References Mathematical optimization is very mathematical If you want performance it really pays to read the books Convex Optimization by Boyd and Vandenberghe pdf available free online e Numerical Optimization by Nocedal and Wright Detailed reference on gradient descent methods Practical Methods of Optimization by Fl
50. gt gt data np array 1 23 4 5 6 repeat 4 reshape 6 2 2 11 2 Storage Schemes 223 gt gt gt mtx gt gt gt mtx todense maciix Cl 1 1 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Sparse bor matrix data indices indptr shape 6 6 O6 CO COMO IB NU t O6 CO CO Im I5 Ol oO S 6 Or Gl GS Sa pEx Ss GS D A OG O 1 gt gt gt data arro s T il 11 2 3 Summary Table 11 1 Summary of storage schemes itera et es es a llli DOK python yes one axis y only Spe ae o yes fyes I CSR sparsetools yes y S t ny at a 11 3 Linear System Solvers tive itera tive itera tive itera ye e has data array specialized for matrix get fancy set fancy solvers note m vector item g item set y arithmetics via CSR incremental construction O 1 item access incremental construction has data array facilitates fast conversion has data array fast row wise ops has data array fast column wise special has data array specialized oe e sparse matrix eigenvalue problem solvers live in scipy sparse linalg e the submodules dsolve direct factorization methods for solving linear systems isolve
51. gt gt gt 8 2 o 3 Type conversion casting gt gt gt Eloat 1 Leo 2 2 Basic types 12 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Warning Integer division 3 2 ii Trick use floats gt gt gt 2 2 do Doo a gt gt gt gt b 2 gt gt gt a b 1 gt gt gt a Lloat b elt Tip If you explicitly want integer division use soc 5s 7 7 2 dert Note The behaviour of the division operator has changed in Python 3 Please look at the python3porting website for details 2 2 2 Containers Tip Python provides many efficient types of containers in which collections of objects can be stored Lists Tip A list is an ordered collection of objects that may have different types For example gt gt gt L red blue green black white gt gt gt type L lt e ype list gt Indexing accessing individual objects contained in the list gt gt gt L 2 green Counting from the end with negative indices gt gt gt L 1 white gt gt gt L 2 black Warning Indexing starts at 0 as in C not at 1 as in Fortran or Matlab Slicing obtaining sublists of regularly spaced elements 2 2 Basic types 13 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt L L red bilue green bplack white gt gt gt 224 green
52. improved debugging and many more It is central to the scientific computing workflow in Python for its use in combination with Matplotlib We start Python with the command line argument py lab py1lab since Python version 0 12 for interactive matplotlib sessions with Matlab Mathematica like functionality 4 1 2 pylab Tip pylab provides a procedural interface to the matplotlib object oriented plotting library It is modeled closely after Matlab Therefore the majority of plotting commands in pylab have Matlab analogs with similar arguments Important commands are explained with interactive examples 4 2 Simple plot Tip In this section we want to draw the cosine and sine functions on the same plot Starting from the default settings we ll enrich the figure step by step to make it nicer First step is to get the data for the sine and cosine functions import numpy as np X np linspace np pi np pi 256 endpoint True C o emp eee v amnes m X is now a numpy array with 256 values ranging from r to 7 included C is the cosine 256 values and S is the sine 256 values To run the example you can type them in an IPython interactive session S ipython pylab This brings us to the IPython prompt IPython 0 13 An enhanced Interactive Python Tatr oduction to TPyvthon s tedgtcturess emagic Iniormition about Eon S magic gt HM ons help gt Em s Own nelo system objecte gt De
53. imres image using py transform 1er image ing fftpack and plot the spectrum Four ion in scipy transform to see the result 1er Four Inverse frequency part of the spectrum so set some of those components to zero use array slicing of the image Do you have any trouble visualising the spectrum If so why 4 The spectrum consists of high and low frequency components The noise is contained in the high 3 Find and use the 2 D FFT funct Apply the 5 imize opt scipy ion and fi imizat 5 5 Opt solution to a minimization or equality ing a numerica Optimization is the problem of find 1 scalar or mult minimization The scipy optimize module provides useful algorithms for function ing d root find ing an 1 curve fitt 1mensiona d RE S gt gt gt from scipy import opt lon f a scalar funct inimum o Finding the m Let s define the following function gt gt gt def f x X s n return x 2 10 np It and plot no arcange 10 gt gt gt X E gt gt gt DIE plor x gt gt gt plt show 109 imize opt scipy ion and fi imizat 5 5 Opt Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 120 100 80 60 40 20 2075 5 y 5 10 This function has a global minimum around 1 3 and a local minimum around 3 8 The ge
54. misc Find help Previous Next Highlight all Match case 9 Reached end of page continued from top e Numpy s and Scipy s documentation is enriched and updated on a regular basis by users on a wiki http docs scipy org numpy As a result some docstrings are clearer or more detailed on the wiki and you may want to read directly the documentation on the wiki instead of the official documentation website Note that anyone can create an account on the wiki and write better documentation this is an easy way to contribute to an open source project and improve the tools you are using 137 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Scipy documentation editor Back to Numpy Scipy documentation Numpy documentation editor scipy org editor Wiki Docstrings Changes Milestones Search Stats Patch Login scipy ndimage morphology binary dilation View Log DifftoSVN Discussion Source Review status Being written SciPy Multi dimensional image processing mod scipy ndimage binary dilation input structure None iterations 1 mask None output None border value 0 origin 0 brute force False Multi dimensional binary dilation with the given structuring element Parameters input array like Binary array like to be dilated Non zero True elements form the subset to be dilated structure array like optional Structuring element used for the dilation Non zero elements are consid
55. page 230 Note that you should be familiar with the content of the previous chapter before reading the current one as basic operations such as masking and labeling are a prerequisite Chapters contents ntroduction and concepts page 291 Scikit image and the SciPy ecosystem page 292 What s to be found in scikit image page 293 Input output data types and colorspaces page 293 Data types page 294 Colorspaces page 295 Image preprocessing enhancement page 295 Local filters page 295 Non local filters page 296 Mathematical morphology page 296 Image segmentation page 298 Histogram based method Otsu thresholding page 299 Marker based methods page 300 Measuring regions properties page 301 Data visualization and interaction page 301 Feature extraction for computer vision page 303 16 1 Introduction and concepts Image 2 np ndarray image np ndarray pixels array values a 2 3 channels array dimensions image encoding dtype np uint8 np uint16 np float 291 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 filters functions numpy skimage scipy gt gt gt check np zeros 9 9 eo checks k 21 1 gt gt gt Check l 2 2 1 gt gt gt import matplotlib pyplot as plt gt gt gt plt imshow check cmap gray interpolation nearest 16 1 1 scikit image and the SciPy ecosystem Stable release 0 8 inc
56. svm SVC kernel linear pone OVC IIt eS do tda d S eaArget SVC There are several support vector machine implementations in scikit learn The most commonly used ones are svm SVC svm NuSVC and svm LinearSVC SVC stands for Support Vector Classifier there also exist SVMs for regression which are called SVR in scikit learn Excercise Train an svm SVC on the digits dataset Leave out the last 10 and test prediction performance on these observations Using kernels Classes are not always separable by a hyperplane so it would be desirable to have a decision function that is not linear but that may be for instance polynomial or exponential Polynomial kernel RBF kernel Radial Basis Func tion E Svm SVC kerneldg rbf icd degree 3 gt gt gt gamma inverse of size of gt gt gt degree polynomial de xe radial kernel Exercise Which of the kernels noted above has a better prediction performance on the digits dataset 19 2 Classification 341 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 19 3 Clustering grouping observations together Given the iris dataset if we knew that there were 3 types of iris but did not have access to their labels we could try unsupervised learning we could cluster the observations into several groups by some criterion 19 3 1 K means clustering The simplest clustering algorithm is k means This divides a set
57. there are different types of exceptions for different errors 2 8 2 Catching exceptions try except while True x int raw_input Please enter a number break except ValueError Prine That wes we valid mumbers Try again Please enter a number a That was no valid number Try again Please enter a number 1 In 9 x Ont 91r try finally int raw_input Please enter a number finally princi Thank Vou for your Input Please enter a number a Thank you for your input 2 8 Exception handling in Python 40 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 VvalueErrori rpnvalid Literal tor inr with base 10s Important for resource management e g closing a file Easier to ask for forgiveness than for permission In I1 def print sorted collection try collection sorri except AttributeError pass print collection in t2 Prim Sorted Ile 65 2l Liy Ve A In 13 pesnt sortec set l 2 277 Scd m oq In i4 prirnt sorted 152 132 2 8 3 Raising exceptions e Capturing and reraising an exception In 15 def filter name name TUR try Nous name name encode ascii TE except UnicodeError e e if name Ga l m print OK Ga l Nu ud else TE Spee raise e AES return name In 16 filter _name Ga l OK Ga l Out 16 GaWMxc3Nxabl In 17 filter name St fan UnicodeDecod
58. 05 30e ON S Erosion Dilation Opening Closing al Dar a Dilation maximum filter gt gt gt a np zeros 5 5 gt gt gt a 2 2 1 gt gt gt ad arcar iE Pe s UR e omp ess is O Dean 6d Wiese dog iex Wee Oda i ieee Wee Xo Wee Wels d v WO de de 10 gt gt gt ndimage binary dilation a astype a dtype array IiI 0 5 7 Ove Olas Ony Ovals Ot Wate hee Se Olds E Ora net duc doc redu Wee Was Oss Orly dco Oc Uuecot et Oud Also works for grey valued images gt gt gt np random seed 2 gt gt gt x YY O3 np random random 2 9 99s EDO IO rt gt gt gt im x y np arange 8 gt gt gt bigger_points ndimage grey_dilation im size 5 5 structure np ones 5 5 gt gt gt square np zeros 16 16 gt gt gt square 4 4 4 4 1 gt gt gt dist ndimage distance_transform_bf square gt gt gt dilate dist ndimage grey _dilation dist size 3 3 Structure np ones 3 3 Opening erosion dilation 12 4 Image filtering 239 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 or or or aire gt gt gt Opening removes small objects gt gt gt a np zeros 5 5 dtype np int gt gt gt a 1 4 1 4 1 al4 4 1 gt gt gt a array I0 0 0 0 0l Ose legs Tbe MODs Oya at S alle ORL Ges Allee cles ee lt 0 gt gt gt ndimage binary_opening a structure np ones 3 3 astype np
59. 12 7 is per Loop 3 1 2 Reference documentation On the web http docs scipy org e Interactive help in Toi np array bt Tn Form D Ullt in FUNCION array Docstring array object dtype None copy True order None subok False ndmin 0 Looking for something gt gt gt np lookfor create array Search results for create array MUMDY er ray Crearte msi c numpy memmap Create a memory map to an array stored in a xbinary file on disk In 6 np con Np COnCcat eniat np con np conjugate np convolve 3 1 3 Import conventions The general convention to import numpy is import numpy as np Using this style of import is recommended 3 1 4 Creating arrays e 1 D 3 1 The Numpy array object Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt d Tpsarray lO L 2 21 gt gt gt a array lOr due ex gt gt gt a ndim 1 gt gt gt a shape 43 gt gt gt len a 4 2 D 3 D 23 gt b Mosaerray ITO dye 2l Ios Aao Xal ay gt gt gt b array io 17 2 5 4 54 gt gt gt b ndim 2 gt gt gt b shape 25 2 gt gt gt len b returns the size of the first dimension 2 pou S a a Dd PTT So aii gt gt gt c array TIL 4115 ods DT gt gt gt c shape C2 o EU Exercise Simple arrays Create simple one and two dimensional arrays First redo the examples from above And the
60. 2 x np pi 0 1 y cos module np cos func mp x pylab plot x y pylab show And this should result in the following figure 14 3 Ctypes Ctypes 1s a foreign function library for Python It provides C compatible data types and allows calling functions in DLLs or shared libraries It can be used to wrap these libraries in pure Python Advantages Part of the Python standard library Does not need to be compiled Wrapping code entirely in Python Disadvantages e Requires code to be wrapped to be available as a shared library roughly speaking d11 in Windows x SO in Linux and dylibin Mac OSX No good support for C 14 3 Ctypes 268 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 14 3 1 Example As advertised the wrapper code is in pure Python mm mnn ENUNDIe Of Wrapping COs TUDDCtIOn Trom Menten using ctypes import ctypes from ctypes util import find_library find and load the library Ibi ctypes call hoadiibrary find library my set the argument type libm cos argtypes ctypes c double set the return type libm cos restype ctypes c_double def cos_func arg ae Wirapper For COS Izrzom Marthe i return libm cos arg LITT e Finding and loading the library may vary depending on your operating system check the documentation for details This may be somewhat deceptive since the math library exists in compiled form on the system alrea
61. 4 Oe 9 i S I ie AV4IPB X Or x 400 1 HO rile AVdIPH xOy x 1001 0 Ez mi OQ AV a4 PE T x9 y gt zc 24 Oe i 0a pc Hom o A VI PH x y zk 24 Oe Os a E o a h i WT d e E Ly OA uh d D l 4 6 3 Markers OCHNMt NOR OL IANMST OS gt VAzD ue gt kKAT m SF A wT Ww 3 C 7 WP WE AAA V NWS wr WV T i X M ww wy 4 V Oe AVAIP tE Q0 0 4 a YO AVAIP 99 H Q0 o 4 4 YOO 4 eeavrairp E x Q0 o 4 409 4 t AV a gt H X O e 4 4 YOOO AVAIP 99 H Q 9 4 4 E 4 e AVvV4 9 c HBx Q0 o 4 a YOE 0906 AV a gt 2 H Q9 o lt gt 4 0909 4 AVAIP o x Q9 o 4 a YOOO 6006 AV a gt Hx Q0 o PEN V am REP 4 A Wid m A L EB A Mae a 4 6 4 Colormaps All colormaps can be reversed by appending r For instance gray r is the reverse of gray If you want to know more about colormaps checks Documenting the matplotlib colormaps 4 6 Quick references 100 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 JM _ _ iT uea Jouuns uds jep ds DIUSIOS M moquies MMMM TTT usud EE GE GE GE HE GE Ee GS Gum a yuid Uue220 aS GERE s O m 70y Aeb Zz 0 dnub idnb peA ys O MEE u193s 3sib MUST I TTT SS XS EN Je2u 3sib Ce OCD jeau 1sib 7777777 CLT DD Aesb_y
62. 5x5 sparse matrix ot type stype numpy floato4 gt with 20 stored elements in Dictionary Of Keys format gt gt gt gt mtx todense Metric L Os see dcus d cos dicere EI Orne Res lz essei doe Cube dO eller Poele bon Mesa Jem Cue Tienda L 1l ii ii E Qa slicing and indexing gt gt gt mtx 1 1 O 0 Pe Meee ls lt lx2 sparse matrix or type stype mnumpy tloatoe4d with 1 stored elements in Dictionary Of Keys format gt gt gt gt me x hs ls Se odense st reed qc I Ov ee poc mca 27 ble eS odense Traceback most recent call last NotImplementedError fancy indexing supported over one axis only Coordinate Format COO also known as the ijv or triplet format three NumPy arrays row col data data i is value at row i col i position permits duplicate entries subclass of _data_matrix sparse matrix classes with data attribute fast format for constructing sparse matrices constructor accepts dense matrix array sparse matrix shape tuple create empty matrix data ij tuple very fast conversion to and from CSR CSC formats fast matrix vector sparsetools fast and easy item wise operations 11 2 Storage Schemes 218 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 manipulate data array directly fast NumPy machinery no slicing no arithmetics directly use facilitates fast c
63. Data in download populations txt lt data populations txt gt _ describes the populations of hares and lynxes and carrots in northern Canada during 20 years You can view the data in an editor or alternatively in Python both shell and notebook In 1 Heat dara popula Lono exe First load the data into a Numpy array gt gt gt data np loadtxt data populations txt gt gt gt year hares lynxes carrots data T trick columns to variables Then plot it gt gt gt from matplotlib import pyplot as plt ao Dl sss mk 20559 297941 Don Olt olor year nares Year dons year IOS gt gt gt plt legendi Hare lynx ear eo loe OS OR 80000 70000 60000 Hare 50000 Lynx l Carrot 40000 30000 20000 10000 1500 1905 1910 1915 1920 The mean populations over time gt gt gt pobudeataoms datal de gt gt gt populations mean axis 0 array S4060 95238095 20166 666066067 5 424002 The sample standard deviations gt gt gt populations std axis 0 array i 20297 90645009 1625459153691 Son ID 255 61 Which species has the highest population each year gt gt gt np argmax populations axis 1 acre lee 2x Op Op ws ie 2p i29 5g Lage ur Ug Oy Cp lx 2 2 ize du 3 2 Numerical operations on arrays 60 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 3 2 3 Broadcasting Basic operations on numpy arrays addition e
64. Dzstubtlils from distutils core import setup Extension from Cython Distutils import build ext setup emdclass build ext build ext ext modules Extension cos module cos module pyx Compiling this 14 5 Cython 276 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 cd advanced interfacing with cython ls cos_module pyx setup py python setup py build ext inplace running Dulld ext eyvEhoning cog module py CO cos module e building cos module extension creating build creating buald tempe linur x20 64 2 7 gee Pe lreae no eare alang q O2 DNDEBUG o fwrae O Wall Wetrice pretotypes fPIC gcc pthread shared build temp linux x86_64 2 7 cos_module o L home esc anaconda lib lpython2 ls build cos module c cos_module pyx cos module so setup py And running it In 1 import cos module zn 2i cos module Type module String Form lt module cos module from cos module so gt File home esc git working scipy lecture notes advanced interfacing with c cython cos modu DOCSTEING No doco ing In 3 dirtcos module Out ls s ee oui eS 4 doge _ file 7 name package ic testo eos func In 4 cos module cos fune 1 0 Out pepe 05420302905906915399 Tn 5 cos module cos Eune 0 0 Oi usage oO In 16 cos _module coes Cune 3 141592605359 Oma pedi eT And testing a little for
65. False Fill value 999999 The mask is also available directly gt gt gt mx mask array False False False True False dtype bool The masked entries can be filled with a given value to get an usual array back gt gt gt x2 mx filled 1 gt gt gt x2 amman ak op cie xn The mask can also be cleared gt gt gt mx mask np ma nomask gt gt gt mx Masked carray deta 1 9 38 99 5 5 mask False False False False False fill value SOOO Domain aware functions The masked array package also contains domain aware functions vos gastos rov 0e uw eibi hu 99a S Meskedvlarray ddta 0s0 0 59314 718056 1098564122990 15 mask False False True True False True fill value le 20 Note Streamlined and more seamless support for dealing with missing data in arrays is making its way into Numpy 1 7 Stay tuned 8 4 Array siblings chararray maskedarray matrix 186 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Example Masked statistics Canadian rangers were distracted when counting hares and lynxes in 1903 1910 and 1917 1918 and got the numbers are wrong Carrot farmers stayed alert though Compute the mean populations over time ignoring the invalid numbers gt gt gt date nploadsxt dats populations t b gt gt gt populations np ma masked array data 1 gt gt gt year datal 0 gt gt gt bad_years year gt 1903 amp
66. Iteration will stop after maxiter steps even if the specified tolerance has not been achieved M sparse matrix dense matrix LinearOperator Preconditioner for A The preconditioner should ap proximate the inverse of A Effective preconditioning dramatically improves the rate of convergence which implies that fewer iterations are needed to reach a given error tolerance callback function User supplied function to call after each iteration It is called as callback xk where xk is the current solution vector LinearOperator Class from scipy sparse linalg interface import LinearOperator common interface for performing matrix vector products useful abstraction that enables using dense and sparse matrices within the solvers as well as matrix free solutions has shape and matvec some optional parameters example gt gt gt import numpy as np gt gt gt from scipy sparse linalg import LinearOperator gt gt gt def mv v return np array 2 v 0 3 v 1 gt gt gt A LinearOperator 2 2 matvec mv gt gt gt A 2x2 LinearOperator with unspecified dtype gt gt gt gt A matvec np ones 2 eiray il NEC gt gt gt A x np ones 2 array d Weep c A Few Notes on Preconditioning problem specific 11 3 often hard to develop if not sure try ILU Linear System Solvers 227 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 available in dsolve as spilu
67. NOY Intp Steps voids func word PyYUPUNG G G char args Npy_intpx lt dimensions NPY Intp steps Vords Tune youd PURUN eee excl els aree eee S aE n pe damens lons y ne Steos vold func void PyUkunc fi Chat arge Moy Ite dimensions NPY 1InNCP S BOIS Voids FUNC void PyUku unc Jd obitum s bsp dimensions NPY intp sbepse voids TUNC vord PyUPUNne gg g chars argar npy intip dimensions Mpy Int Steps vold Tune VOL PyURUN EE EP CAS DD D chNnar s arge Dey inip dimensions Apy Intp Steps vold func void PyUFunc DD Dchar args Npy intp dimensions Npy intps Steps volds TUNC vord PyUPUncC_PRPIE cChar x arger Npy Intp dimensions Npy intpp steps volds une void E SIEG oae arge NPY Itp dimensions NPY 1nCpP Secps Voids TUNC Required module initialization 8 2 Universal functions 176 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 import array import Urunc rhe actual Urine cleclarcation cdef PyUFuncGenericFunction loop func 1 cdei char ptit output ypes cdef void xelementwise_funcs 1 Reminder some pre made Ufunc loops 2222 2222222222 SAA SO PEE a e aa float elementwise func float input 1 SX NEP SHUT NC SEE eee NO float ebtementwise Ttunco btloat anpur i float Input T SUME UE des double elementwise func double input 1 me Y pU Ecce double elementwise func double input 1 double input 2 po CXNEUTurmesp De elementwise func comple
68. Release 2013 2 beta euroscipy 2013 3 4 2 Loading data files Text files Example populations txt year hare lynx carrot 1900 30e3 4e3 48300 1901 47 2e3 6 le3 48200 1902 70 2e3 9 063 41500 1903 Aes 35 285 39200 gt gt gt data Mp loadtxt data pop lations tat gt gt gt data array Il 1900 200002 4000 485300 1 OO E T2 00e CLOG 48200415 80227 702005 OSU U us A4LS00 el gt gt gt npesavetsc pop2 xb dota gt gt gt data2 np loadtxt popZ Ext Note If you have a complicated text file what you can try are np genfromtxt Using Python s I O functions and e g regexps for parsing Python is quite well suited for this Reminder Navigating the filesystem with Python In 1 pwd show current directory homeyuser sturt 201l numpy cutorial In 2 cd ex homevuser stutr 2 00l mumpy tutorbial ex In 3 ls populations txt species txt Images Using Matplotlib gt gt gt img plt imread data elephant png gt gt gt img shape img dtype 2007 3007 1392 dtype tlcats2 gt gt gt plt imshow img lt matplotlib image AxesImage object at gt gt gt gt plt savertig plot png gt gt gt plt imsave red elephant img 0 cmap plt cm gray This saved only one channel of RGB gt gt gt plt imshow plt imread red_elephant png lt matplotlib image AxesImage object at gt Other librarie
69. Release 2013 2 beta euroscipy 2013 from scipy import misc 1 misc lena SX sy l shape Kp Y Mpsogrid 0masx es regions sy 6 X 4 Y 6 note that we use broadcasting block mean ndimage mean l labels regions index np arange l1 regions max PI block_mean shape sx 4 sy 6 When regions are regular blocks it is more efficient to use stride tricks Example fake dimensions with strides page 169 Non regularly spaced blocks radial mean SX Sy l shape Xp b mnpeogrrdgsso s qc TWO DEN aa ISK LL a es xe 2 rbin 20 r r max astype np int radial mean ndimage mean l labels rbin index np arange 1 rbin max 1 Other measures Correlation function Fourier wavelet spectrum etc One example with mathematical morphology granulometry http en wikipedia org wiki Granulometry_ 28morphology 29 gt gt gt def disk structure n Struct npszerostt2 scm foil 2 s mu 19 x y Mp Induces 2 n a dicke ue b mask x n 2 y n 2 lt nx Z struct mask 1 return struct astype np bool granulometry data sizes None S max data shape if sizes None sizes range l s 2 2 granulo ndimage binary_opening data structure disk structure n sum for n in sizes 12 6 Measuring objects properties ndimage measurements 245 DU gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt DFF gt gt gt D gt
70. Running cProfile In the Python example above IPython simply calls the built in Python profilers cProfile and profile This can be useful if you wish to process the profiler output with a visualization tool Pye hon m errno e oem cs ele np Using the o switch will output the profiler results to the file demo prof 10 2 5 Using gprof2dot In case you want a more visual representation of the profiler output you can use the gprof2dot tool S Gererzder crate emo pro dot Eng esso et Ing Which will produce the following picture 10 2 Profiling Python code 206 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 del Stest EMT 106 lt module gt 96 46 0 76 init 128 emodul amp e 0 0096 0 01 ae 1 basic 6 lt module gt 0 5290 0 0195 il Which again paints a similar picture as the previous approaches 10 3 Making code go faster Once we have identified the bottlenecks we need to make the corresponding code go faster 10 3 1 Algorithmic optimization The first thing to look for is algorithmic optimization are there ways to compute less or better For a high level view of the problem a good understanding of the maths behind the algorithm helps However it is not uncommon to find simple changes like moving computation or memory allocation outside a for loop that bring in big gains Example of the SVD In both examples above the SVD Singular Valu
71. SceneEditor HGroup n turns resizable True Fire up the dialog N na subiere sao T1409 TIGE EC nS eileen S Tip Full code of the example examples mlab dialog py 18 6 Putting it together Exercise Using the code from the magnetic field simulation create a dialog that enable to move the 2 coils change their parameters Hint to define a dialog entry for a vector of dimension 3 direction Array float value 0 0 1 cols 3 shape 3 You can look at the example coil application py to see a full blown application for coil design in 270 lines of code 18 6 Putting it together 336 CHAPTER 19 scikit learn machine learning in Python author Fabian Pedregosa Gael Varoquaux machine learning in Python Prerequisites e Numpy Scipy e Python e matplotlib e scikit learn http scikit learn org Chapters contents Loading an example dataset page 338 Learning and Predicting page 339 Classification page 339 k Nearest neighbors classifier page 339 Support vector machines SVMs for classification page 340 Clustering grouping observations together page 342 K means clustering page 342 Dimension Reduction with Principal Component Analysis page 343 Putting it all together face recognition page 344 Linear model from regression to sparsity page 346 Sparse models page 346 Model selection choosing estimators and their parameters page 347 Grid sea
72. Schemes seven sparse matrix types in scipy sparse 1 csc matrix Compressed Sparse Column format csr matrix Compressed Sparse Row format bsr matrix Block Sparse Row format dok matrix Dictionary of Keys format 2 3 4 lil matrix List of Lists format 5 6 coo_matrix COOrdinate format aka IJV triplet format 7 dia matrix DIAgonal format each suitable for some tasks many employ sparsetools C module by Nathan Bell assume the following is imported gt gt gt import numpy as np gt gt gt import scipy sparse as sps gt gt gt import matplotlib pyplot as plt warning for NumPy users the multiplication with is the matrix multiplication dot product not part of NumPy passing a sparse matrix object to NumPy functions expecting ndarray matrix does not work 11 2 1 Common Methods all scipy sparse classes are subclasses of spmnat rix default implementation of arithmetic operations always converts to CSR subclasses override for efficiency shape data type set get nonzero indices format conversion interaction with NumPy toarray todense 11 2 Storage Schemes 213 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 attributes mtx A same as mtx toarray mtx T transpose same as mtx transpose mtx H Hermitian conjugate transpose mtx real real part of complex matrix mtx imag imaginary part of complex
73. T2 21 warning Cooled to 3057 700030 at T 2027977042 195489421523 but this s not the smallest point found larra UL sad Te a aa aa It is a very popular algorithm but it is not very reliable Note For function of continuous parameters as studied here a strategy based on grid search for rough exploration and running optimizers like the Nelder Mead or gradient based methods many times with different starting points should often be preferred to heuristic methods such as simulated annealing 13 3 Practical guide to optimization with scipy 13 3 1 Choosing a method 10 10 E 2 10 rr U c 9 2 v 10 Ill conditioned Gaussian c 2e IIl conditioned quadratic 3 Rosenbrock 10 n e 4 dim 2 O dim 32 9 Well conditioned Gaussian dd s e dim 128 8 Well conditioned quadratic 4 a c jugate gradient Powell Nelder mead L BFGS BFGS Conjugate gradient BFGS L BFGS Newton w f w f w f w Hessian 13 3 Practical guide to optimization with scipy 257 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Without knowledge of the gradient e In general prefer BFGS scipy optimize fmin_bfgs or L BFGS scipy optimize fmin 1 bfgs b even if you have to approximate nu merically gradients On well conditioned problems Powell scipy optimize fmin powell and Nelder Mead scipy optimize fmin both gradient free methods work well in high dimension but they collapse f
74. Traits property implementation ffeeeeeeeeeeeeeeeeeeeeeeeee tt erE def _get_storage self new storage self storage self release self inflows return min new storage self max storage Set storage self storage value self storage storage value get spillage self new storage self storage self release self inflows overflow new storage self max storage return max overflow 0 Qon trait change storage def print state self print Storage tRelease tInflows tSpillage Str format e CNET join 4s T7 2f for zn raungec4 1 print str format format self storage self release self inflows self spillage print T s 79 if name e main t projectA Reservoir name Project A max storage 30 max release 5 hydraulic head 60 efficiency 0 8 State ReservoirState reservoir projectA storage 25 state release 4 state inflows 0 The patterns supported by the on trait change method and decorator are powerful The reader should look at the docstring of HasTraits on trait change for the details 17 3 7 Some more advanced traits The following example demonstrate the usage of the Enum and List traits from traits api import HasTraits Str Float Range Enum List from traitsui api import View Item class IrrigationArea HasTraits name Str surface Float desc Surface ha Crop Enum ALrslra wWwaedct Corton class Reservoir HasTraits name
75. When a complex initialisation is required for a trait a XXX default magic method can be implemented It will be lazily called when trying to access the XXX trait For example def name default self mew Complex 2nztrelTsution Of Ene reservoir name 97 return Undefined 17 3 2 Validation Every trait does validation when the user tries to set its content reservoir Reservoir name Lac de Vouglans max_storage 605 reservoir max storage 230 2 5 SIE B Te E CHE Traceback most recent call last JUse s dpinec Projeces SCloy llecrure moves advanced cip lpvyinen imapuy 97 7edmno0 4a gt in mod 17 3 What are Traits 308 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 T reservoir max storage 230 US cms claim eom oes evs pacis Aci pasce handlers 7e in Curren sels object fame value 166 vu 167 raise TraitError object name self full info object name value Weis value 18539 170 def arg error self method arg num object name value TraitError The max storage trait of a Reservoir instance must be a float but a value of 23 17 3 3 Documentation By essence all the traits do provide documentation about the model itself The declarative approach to the creation of classes makes it self descriptive from traits api import HasTraits Str Float class Reservoir HasTraits name Str max storage Float 100
76. an variable before assigning its value In C conversely one should write int a 3 In addition the type of a variable may change in the sense that at one point in time it can be equal to a value of a certain type and a second point in time it can be equal to a value of a different type b was first equal to an integer but it became equal to a string when it was assigned the value he 110 Operations on integers b 2 xa are coded natively in Python and so are some operations on strings such as additions and multiplications which amount respectively to concatenation and repetition 2 2 Basic types 2 2 1 Numerical types Tip Python supports the following numerical scalar types Integer gt gt gt 1 1 2 gt gt gt 4 EU 2 2 Basic types 11 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 mos type a lt typPe int 2 Floats gt gt gt C 2 1 gt gt gt Lype Cc EVI loge gt Complex gt gt gt a 1 5 0 5 gt gt gt a real IPS gt gt gt a imag DET eer Cypel 0J type complex gt Booleans Tip A Python shell can therefore replace your pocket calculator with the basic arithmetic operations x gt gt gt 3 gt 4 False gt gt gt test 3 gt 4 gt gt gt Test False gt gt gt type test lt Evype bool gt modulo natively implemented gt gt gt 7 x 3 AERO gt gt gt 2xx10 WORA
77. and the language is not more advanced Some software are dedicated to one domain Ex Gnuplot or xmgrace to draw curves These programs are very powerful but they are restricted to a single type of usage such as plotting What about Python e Advantages Very rich scientific computing libraries a bit less than Matlab though Well thought out language allowing to write very readable and well structured code we code what we think Many libraries for other tasks than scientific computing web server management serial port access etc Free and open source software widely spread with a vibrant community e Drawbacks less pleasant development environment than for example Matlab More geek oriented Not all the algorithms that can be found in more specialized software or toolboxes 1 2 Scientific Python building blocks Unlike Matlab Scilab or R Python does not come with a pre bundled set of modules for scientific computing Below are the basic building blocks that can be combined to obtain a scientific computing environment e Python a generic and modern computing language Python language data types st ring int flow control data collections lists dictionaries pat terns etc 1 2 Scientific Python building blocks 5 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Modules of the standard library A large number of specialized modules or applications writt
78. approaches with a standard feature usually ends up making things more readable and interoperable as well Guido van Rossum Adding Optional Static Typing to Python An iterator is an object adhering to the iterator protocol basically this means that it has a next method which when called returns the next item in the sequence and when there s nothing to return raises the StopIteration exception An iterator object allows to loop just once It holds the state position of a single iteration or from the other side each loop over a sequence requires a single iterator object This means that we can iterate over the same sequence more than once concurrently Separating the iteration logic from the sequence allows us to have more than one way of iteration Calling the iter __ method on a container to create an iterator object is the most straightforward way to get hold of an iterator The iter function does that for us saving a few keystrokes gt gt gt nums 1 2 3 note that varies these are different objects gt gt gt iter nums Jd striterdbor object atl ae 2 numas iter lt listaterator object at sses gt gt gt nums __ reversed_ lt listreverseiterator object at gt gt gt gt it iter nums gt gt gt next it next obj simply calls obj next 1 gt gt gt it next Dos NeXT 1 0 E gt gt gt next it Traceback most recent call last Bitte seein Li
79. array ALEA r ROn Os3 7 O BEDA JE OUTIL TAU do Qd sy CME PAY decoy t S ue CePA S0 SUI CV Aur dave 00819 02 dryos W sensor code S4 position lt io A value Tot Field access works by indexing with field names gt gt gt samples sensor_code a EE EE n ea ep Ven EY E dtype S4 gt gt gt samples value array ln iO o ONTI OES og O 20085753 gt gt gt samples 0 COADBEA Ju 0357 gt gt gt samples 0 sensor code TAU gt gt gt samples 0 CPE ae OE Multiple fields at once 33 More elaborate arrays 1111 69 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt samples position value dno OE 30 Toss WOME IO IO Sr n ile Wee sel Gia TEE uz ORT olla dtype poesteion fo C value reta Fancy indexing works as usual gt gt gt samples samples sensor code ALFA acray qu AMEN S Iss ARLE AS Sade sO ah deyoe sensor code S475 position mS value eue Note There are a bunch of other syntaxes for constructing structured arrays see here and here 3 3 3 maskedarray dealing with propagation of missing data For floats one could use NaN s but masks work for all types gt gt gt x np ma array 1 2 3 4 mask 0 1 0 dI gt gt gt X Masked array data 1 a mask False True False True fill value 999999 gt gt gt y
80. buffer n kate Menu settings gt configure kate n plugins enable external tools n external Tools add py flakes kdialog title pyl lakes Sfilemame msgbox S pytlakes f1blensme In TextMate Menu TextMate gt Preferences gt Advanced gt Shell variables add a shell variable TM PYCHECKER Library Frameworks Python framework Versions Current bin pyflakes Then Ct rl Shift V is binded to a pyflakes report In vim In your vimrc binds F5 to pyflakes dutocmd EsleType python let amp mp eoho xx running lt s pytlakes 3 au ocna Filelype tex Mp rst oyenom wmoposEese5sesceo smaled M autocmd FileType tex mp rst python map lt Esc gt 15 make M autocmd FileType tex mp rst python set autowrite 9 1 Avoiding bugs 193 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In emacs In your emacs binds F5 to pyflakes defun pyflakes thisfile interactive compile format pyflakes s buffer file name define minor mode pyflakes mode Toggle pyflakes mode With no argument this command toggles the mode Non null prefix argument turns on the mode Null prefix argument turns off the mode 27 ie inicial value miL 2 2 The qndscator Lor the Mede line Pyflakes 7 The minor mode bindings W hts veSpVEtlekescchustule r add hook python mode hook lambda pyflakes mode t A type as go spell checker like integratio
81. can be used to cache the value and only recompute them once invalidated Let s extend the TraitsUI introduction with the ReservoirState example from traits api import HasTraits Instance DelegatesTo Float Range Property from traitsui api import View Item Group VGroup from reservoir import Reservoir class ReservoirState HasTraits Keeps track of the reservoir state given the initial storage For the simplicity of the example the release is considered in hm3 timestep and not in m3 s mmm reservoir Instance Reservoir name DelegatesTo reservoir max storage DelegatesTo reservoir max release DelegatesTo reservoir min release Float state attributes storage Property depends_on inflows release control attributes inflows Float desc Inflows hm3 release Range low min_release high max_release spillage Property desc Spillage hm3 depends_on storage inflows release Traits view fg fT f yTfpsZSsTSSTSTUSSTPST EST STEST STSSTSTSSTSSTSTSSTPSTPST ST Y traits view View Group VGroup Item name Item storage Item spillage label State style readonly VGroup Item inflows Item release label Control Fir Private traits FHFFETEEEEEEREEEEEE EERE EEE ETE EEE EE EH HEE EEE _storage Float 17 3 What are Traits 314 Python Scientific lecture notes Release 2013 2 beta
82. computing the factorization over various domains ra LO ts eS oc r I ta LIe aceon Qute LLII s L P x xr222 ec ia 12 factor i moculus 5 LENZ 2 P e n o 2 c SymPy is also able to solve boolean equations that 1s to decide if a certain boolean expression is satisfiable or not For this we use the function satisfiable Tou RS secas cd be 3e y Oui LS x3 True we True 15 4 Equation solving 288 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 This tells us that x amp y is True whenever x and y are both True If an expression cannot be true i e no values of its arguments can make the expression True it will return False In 14 satisfiable x amp x Out 14 False 15 4 1 Exercises 1 Solve the system of equations x y 2 2 x y 0 2 Are there boolean values x y that make x y amp y x true 15 5 Linear Algebra 15 5 1 Matrices Matrices are created as instances from the Matrix class gt gt gt from sympy import Matrix oe Mab ase TED Ols US die o 3 DOr 1 unlike a NumPy array you can also put Symbols in it gt gt gt x Symbol 7 gt gt gt y Symbol y scc A essetis ily bi gt gt gt A Li ye H gt gt gt Axx2 1 xxy Ze Xx Zep du ory 15 5 2 Differential Equations SymPy is capable of solving some Ordinary Differential Equations sympy ode dsolve works like this Ta Ale ues oe cech ee x 136 sie
83. def cleanup self text return text replace amp mdash u N em dash 7 2 Decorators 155 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Here we use a decorator to decentralise the registration of plugins We call our decorator with a noun instead of a verb because we use it to declare that our class is a plugin for WordProcessor Method plugin simply appends the class to the list of plugins A word about the plugin itself it replaces HTML entity for em dash with a real Unicode em dash character It exploits the unicode literal notation to insert a character by using its name in the unicode database EM DASH If the Unicode character was inserted directly it would be impossible to distinguish it from an en dash in the source of a program 7 2 8 More examples and reading e PEP 318 function and method decorator syntax e PEP 3129 class decorator syntax http wiki python org moin PythonDecoratorLibrary e http docs python org dev library functools html http pypi python org pypi decorator Bruce Eckel Decorators I Introduction to Python Decorators Python Decorators II Decorator Arguments Python Decorators III A Decorator Based Build System 7 3 Context managers A context manager is an object with enter and exit methods which can be used in the with state ment with manager as var do something var is in the simplest case equivalent to var man
84. demol Type module Base Class type module tec IUDICI Form module demo from demo py gt Namespace Interactive File home varoquau Projects Python talks scipy 2009 tutorial source demo py DOCS CLING A demo module In 5 who demo In 6 whos Variable Type Data Info demo module lt module Gene from CIT In 7 dir demo Oure Cepu iein E doe YS Eile g name package ro ra Eel EGIT SE In 8 demo demo builtins demo init demo str demo class demo name demo subclasshook demo delattr demo new demo c demo dict demo package demo d demo doc demo reduce demo print a demo file demo reduce ex demo print b demo format demo repr demo py demo getattribute demo setattr demo pyc demo hash demo sizeof _ _ Importing objects from modules into the main namespace In 10 whos Variable Type Dea neo demo module mos te demo irom cCemo py 2 5 Reusing code scripts and modules 30 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 pen s RUCE Lon Sruncbwon peint oat 0xby4215954 Print b HEURE AU Tunc won print b at Osdoy 420402 In Li prine a a Warning Module caching Modules are cached if you modify demo py and re import it in the old session you will get the old one Solution In 10 reload demo 2 5 4 main and module lo
85. dialog from traits api import HasTraits Instance from traitsui api import View Item HGroup from mayavi core ui api import SceneEditor MlabSceneModel def curve n turns The function creating the x y 2 coordinates needed to plor Phi Npslinspace 0 2npepus 2000 return up costpbuw se 1 sb Sv nps coser tib mss russo nm 1 4 OS S4np cos res pns sepa 0 54 nO STIS Gal eins SE To e class Visualization HasTraits ihe class that contains the dialog scene Instance MlabSceneModel def init self HasTraits _ _init_ self X Y Z curve n_turns 2 Populating OUr DUO self plot self scene mlab plot3d x y zZ Describe the dialog view View Item scene height 300 show_label False editor SceneEditor HGroup n turns resizable True Fire up the dialog Vigu alization conftIigure traritsl Tip Let us read a bit the code above examples mlab_dialog py 18 5 Making interactive dialogs 334 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 First the curve function is used to compute the coordinate of the curve we want to plot Second the dialog is defined by an object inheriting from HasTraits as it is done with Traits page 305 The important point here is that a Mayavi scene is added as a specific Traits attribute Instance This is important for embedding it in the dialog The view of this dialog is defined by the view attribute of the obje
86. e inplace will output the compiled extension module into the current directory The file cos module so contains the compiled extension which we can now load in the Python interpreter In 1 import cos_module zn F2 cos module Type module String Form lt module cos module from cosomodule so File home esc git working scipy lecture notes advanced interfacing with c python c api co DOCSELING senmosdocsvtyamg In 3 dir cos module Cm so Adee 94 2 cae Ucet ee package y Sos rune in 4 cos module cos func CL 0 Lp 4l 55250907 90 5495 53 9359 In 5 cos o module cos func 0 0 Euros te in I5 Cos module cos Fune 3 141592653593 Ome ts ES O Now let s see how robust this is In 10 cos_module cos_func foo Typerbrror Traceback most recent call last lt ipython input 10 llbee483665d gt in lt module gt c COs mMmocule cos Cune o TypeError a float is required 14 2 2 Numpy Support Analog to the Python C API Numpy which is itself implemented as a C extension comes with the Numpy C API This API can be used to create and manipulate Numpy arrays from C when writing a custom C extension See also ref advanced_numpy _ The following example shows how to pass Numpy arrays as arguments to functions and how to iterate over Numpy arrays using the old Numpy C Api It simply takes an array as argument applies the cosine function from the math h and returns
87. else 3 2 Numerical operations on arrays 65 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt b a gt gt gt a resize 4 Traceback most recent call last Bide Usscomm e line 1 Lia lt mocule gt ValueError cannot resize an array that has been referenced or is referencing another array in this way Use the resize function Exercise Shape manipulations Look at the docstring for reshape especially the notes section which has some more information about copies and views Use flatten as an alternative to ravel What is the difference Hint check which one returns a view and which a copy Experiment with transpose for dimension shuffling 3 2 5 Sorting data Sorting along an axis s a Mpsarray pm So 5 Ll 2 ur gt gt gt b np sort a axis 1 gt gt gt b arrays A Si ty shee ZD Note Sorts each row separately In place sort gt gt gt a sort axis 1 gt gt gt a arca Like ay 5g ass ese Sorting with fancy indexing gt gt gt a Np array 4 3 4 1 2 gt gt gt J J np argsorta gt gt gt j Hrs a x NI gt gt gt a j ausa co Finding minima and maxima gt gt gt a Mp erray 47 37 d un gt gt gt J max np argmax a gt gt gt j min np argmin a gt gt gt jJ max J min 0 2 3 2 Numerical operations on arrays 66 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 E
88. few lines and explore the local variables Spb ccm gt home varoquau dev scipy lecture notes advanced debugging optimizing wiener filtering py 37 SG Il var local var noisy img S126 5129 37 for uw rangel SO res noisy img denoised img ipdb gt prin l var MESiSGS S379 Sole sang DOL ATI ST 50175 1953 957 eg G46 Biol 2355 59790 210 344 c 392 604 3377 Paseo 02 Ser eae oce ESO Is Sas 892 290 425 2as 6901955 aiGGr Mos Too nag 999 12429 59207 ipdb gt print Mo vassmaenmu 0 Oh dear nothing but integers and O variation Here is our bug we are doing integer arithmetic 9 3 Using the Python debugger 198 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Raising exception on numerical errors When we run the wiener_filtering py file the following warnings are raised In 2 oun wirener ii li eringapy wiener_filtering py 40 RuntimeWarning divide by zero encountered in divide noise level 1 noise l ES We can turn these warnings in exception which enables us to do post mortem debugging on them and find our problem more quickly In 3 np seterr all raise Cum IS Adaya Orie aval vum so ete y uUnder Poomose In 4 Srun wiener_filtering py Roc opos Bt o Traceback most recent call last home esc anaconda lib python2 7 site packages IPython utils py3compat pyc in execfil fname wi TG else 177 filename fname gt 178 buil
89. for this point z kcu e Boilerplate Cython definitions You don t really need to read This part it Just pulls in stuff from the Numpy C headers 8 2 Universal functions 178 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 cedet extern from numpy arrayobject h Vold Import array ctypedef int npy_intp cdef enum NPY_TYPES NPY SCD OU EEE cdei extern from numpy utuncob jock 1 void import urune ctypeder void PyUFuncGenerricFuncetrion char npy_intp Npy_intp vordx object PyUPunc cPrEomBuncAmdDosve PyUFuncGenerrcBunmcrb dione func wocdxs data Chars types Int ntypes int nin Ine nou ine identity Xetra nane Char doc dite 1 VOLT PyVUP Une DD Debate NPY Inept APY Intp we ds Required module initialization import array SED oe UCUN 45 Ihe actuel uunc GdeCclaratton cdef PyUFuncGenericFunction loop func 1 cder char mnput output types 3 cdef void xelementwise_funcs 1 loop_func 0 PyUFunc_DD_D NEY sCDOUBLE Input output types 0 input SOUL DUE types NPY CDOUBLE input_output_types 2 NPY_CDOUBLE elementwise funcs 0 lt void gt mandel_single_point mandel PyUFunc_FromFuncAndData feep EunG elementwise funcs input output types 1 number of supported input types 2 number of input args 1 number of output args O identity element never mind this mandel function name mance l 2 iC gomputes iterated Ze
90. gt Maske cd cx cu gt gt gt Masks gt gt gt lena mask 0 gt gt gt Fancy indexing gt gt gt lena range 400 range 400 255 12 3 1 Statistical information gt gt gt lena misc lena gt gt gt lena mean 124 04678944726562 gt gt gt lena max lena min ET np histogram 12 3 Basic manipulations 234 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Open as an array the scikit image logo http scikit image org _static scikits_image_logo png or an image that you have on your computer Crop a meaningful part of the image for example the python circle in the logo Display the image array using mat lplot1ib Change the interpolation method and zoom to see the difference Transform your image to greyscale Increase the contrast of the image by changing its minimum and maximum values Optional use scipy stats scoreatpercentile read the docstring to saturate 5 of the darkest pixels and 5 of the lightest pixels Save the array to two different file formats png jpg tiff scikits image image processing in python 12 3 2 Geometrical transformations lena misc lena lx ly lena shape Cropping Grop lena lona lls V 4A ils 7 4 M EE E oop lt gt Aon flip flip_ud_lena np flipud lena rotation rotate_lena ndimage rotate lena 45 rotate_lena_noreshape ndimage rotate lena 45 reshape False 12 3 Basic mani
91. gt assert y a 4 all Solution px lew HUE N om Pu y CTS Sos a cv Pa Ju Dey ty O 8 1 Life of ndarray 166 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Warning Another array taking exactly 4 bytes of memory gt gt gt y np array 1 3 2 4 dtype np uint8 transpose gt gt gt x y copy gt gt gt x arrcay il 2l Lr xb Geype uints gt gt gt y pud iil 2 3 4 dtype uint8 gt gt gt X view np intl6 array if Si3 4 1027 dtype int16 gt gt gt 053020 95502505 CONES LP gt gt gt y view np intl6 array iil 769 1026 dtype intlo What happened We need to look into what x 0 1 actually means aor 505501 020402 7697 1020 8 1 4 Indexing scheme strides Main point The question gt gt gt x np array l1 2 3 m Lie op Fle uet estipcnbo gt gt gt str x data EX SOU SO2 03 04 x05 x06 0 7 SEP ver At which byte in x data does the item x 1 2 begin The answer in Numpy strides the number of bytes to jump to find the next element stride per dimension gt gt gt x strides ous 1 z gt byte ormeet 3 1 x a Pts me Sepak gt gt gt x datal byte_offset PADO gt gt gt x 2 6 simple flexible C and Fortran order gt gt gt x mnp array il 2 ls l4 5 6l ae Li eo S deype np intlG order C gt gt gt x strides 167 8 1 Life of
92. gt gt gt b np arange 5 gt gt gt nw p 1 gt gt gt a array TO ly 2p or 4 A Sy 27 de Ol Exercise Indexing and slicing Try the different flavours of slicing using start end and step Verify that the slices in the diagram above are indeed correct You may use the following expression to create the array gt gt gt np arange 6 np arange 0 10 np newaxis arcay I 0 1s fet ay 4 Wales 293 lite dde lle eee Ag du c dius Silge Oe Boe Ou 41 42 43 44 SUM V NE S NM US Try assigning a smaller 2D array to a larger 2D array like in the 1D example above Use a different step e g 2 in the reversal idiom above What effect does this have 3 1 The Numpy array object 51 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Array creation Create the following arrays with correct data types su Par on course 3 statements for each Hint Individual array elements can be accessed similarly to a list e g a 1 ora 1 2 Hint Examine the docstring for diag ae eas Fn Exercise Tiling for array creation Skim through the documentation for np tile and use this function to construct the array E MC MEN MM 25 Uy Zu dep vor Ai Lay oy 47 S Sy uu 2 Z 1 3 1 9 Copies and views A slicing operation creates a view on the original array which is just a way of
93. gt guess 2 2 gt gt gt params params covariance optimize curve fit f2 xdata ydata guess gt gt gt params array 099923147 927606595 1 Now we have found the minima and roots of f and used curve fitting on it we put all those resuls together in a single plot 5 5 Optimization and fit scipy optimize 111 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 120 f x 100 Curve fit result e e Minima 80 v v Roots 60 Gq 40 20 O 20 10 5 0 5 10 X Note In Scipy gt 0 11 unified interfaces to all minimization and root finding algorithms are available scipy optimize minimize scipy optimize minimize scalar and scipy optimize root They allow comparing various algorithms easily through the method keyword You can find algorithms with the same functionalities for multi dimensional problems in scipy optimize Exercise Curve fitting of temperature data The temperature extremes in Alaska for each month starting in January are given by in degrees Celcius mex i 9r abe Lern r Sor a Se ede 2s or e iM AOA cer a O Aa aa a Hop e ced cmd feodi eS Plot these temperature extremes 2 Define a function that can describe min and max temperatures Hint this function has to have a period of 1 year Hint include a time offset Fit this function to the data with scipy optimize curve fit Plot the result Is the fit reasonable If not why Is th
94. gt pil amshnow digvis images Jy cmap ol cm gray_r lt matplotlib image AxesImage object at gt To use this dataset with the scikit we transform each 8x8 image into a vector of length 64 gt gt gt data digits images reshape digits images shape 0 1 19 1 1 Learning and Predicting Now that we ve got some data we would like to learn from it and predict on new one In scikit learn we learn from existing data by creating an estimator and calling its fit X Y method gt gt gt from sklearn import svm gt gt gt clf svm LinearSVC soc Cli Li C aris data iris tarcrget 7 learn from the data LLAECACSVC a Once we have learned from the data we can use our model to predict the most likely outcome on unseen data voce ode pr5eosce lll 9 oos ju OZ eal array 0 dtype int32 Note We can access the parameters of the model via its attributes ending with an underscore gt gt gt Cli coer array i 0 11 19 2 Classification 19 2 1 k Nearest neighbors classifier The simplest possible classifier is the nearest neighbor given a new observation take the label of the training samples closest to it in n dimensional space where n is the number of features in each sample 19 2 Classification 339 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Sepal width Sepal length The k nearest neighbors classifier internally uses an algorithm based on ba
95. half of the observations below and half above gt gt gt np median a OU OA PU 4 c 5 6 Statistics and random numbers scipy stats 114 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 It is also called the percentile 50 because 50 of the observation are below it gt gt gt stats scoreatpercentile a 50 2090959029054 Lan Similarly we can calculate the percentile 90 gt gt gt stats scoreatpercentile a 90 Ala calles is oec are The percentile is an estimator of the CDF cumulative distribution function 5 6 3 Statistical tests A statistical test is a decision indicator For instance if we have two sets of observations that we assume are gen erated from Gaussian processes we can use a T test to decide whether the two sets of observations are significantly different gt gt gt a np random normal 0 1 size 100 gt gt gt b np random normal 1 1 size 10 npo State Lreest 1nata 1 3 758227707 222 7 OVID 7 19163 The resulting output is composed of The T statistic value it is a number the sign of which is proportional to the difference between the two random processes and the magnitude is related to the significance of this difference the p value the probability of both processes being identical If it is close to 1 the two process are almost certainly identical The closer it is to zero the more likely it is that the processes have different mean
96. import numpy as np import pylab import cos double ix np arange 0 y np empty like pylab plot x y pylab show S 2 sb m pU x 0 cosccoubDlesscoscdouotesTumetx Es y 14 6 Summary In this section four different techniques for interfacing with native code have been presented The table below roughly summarizes some of the aspects of the techniques x PartofCPython Compiled Autogenerated Numpy Support yos CAS Cython Of all three presented techniques Cython is the most modern and advanced In particular the ability to optimize code incrementally by adding types to your Python code is unique 14 7 Further Reading and References e Ga l Varoquaux s blog post about avoiding data copies provides some insight on how to handle memory management cleverly If you ever run into issues with large datasets this is a reference to come back to for some inspiration 14 6 Summary 279 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 14 8 Exercises Since this is a brand new section the exercises are considered more as pointers as to what to look at next so pick the ones that you find more interesting If you have good ideas for exercises please let us know 1 Download the source code for each example and compile and run them on your machine 2 Make trivial changes to each example and convince yourself that this works E g change cos for
97. import watershed is_local_maximum gt gt gt gt gt gt Generate an initial image with two overlapping circles gt gt gt x yY Np indices 80 20 gt gt gt xl Vip x2 y2 207 20 44 D2 gt gt gt rl r2 l6 20 gt mask Circle x xl 2 r y ylas lt ris au See m y Ve dus gt gt gt image Np logical or mask circlel mask circlez gt gt gt mask_circle2 gt gt gt Now we want to separate the two objects in image gt gt gt Generate the markers as local maxima of the distance gt gt gt to the background gt gt gt from scipy import ndimage gt gt gt distance ndimage distance_transform_edt image gt gt gt local maxir 15 Local maximum distance image np ones 2 377 gt gt gt markers morphology label local maxi gt gt gt labels ws watershed distance markers mask image Random walker segmentation The random walker algorithm skimage segmentation random walker 1s similar to the Watershed but with a more probabilistic appraoch It is based on the idea of the diffusion of labels in the image gt gt gt Transform markers image so that O0 valued pixels are to gt gt gt be labelled and 1 valued pixels represent background gt gt gt markers image 1 gt gt gt labels_rw segmentation random_walker image markers image distance map watershed segmentation random walker segmentation 16 4 Image segmentation 300 Pyt
98. iterative methods for solving linear systems eigen sparse eigenvalue problem solvers 11 3 Linear System Solvers 224 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e all solvers are accessible from gt gt gt import scipy sparse linalg as spla pos Soleo dll LinearOperator CDPCOSUdD5 09 7 Tester Gog 7 arpack esc Weis isc aslinearoperator Pest Matrix 3 PoTog dsolve eigen ergen Symmetric factorvzed gmres interface resolve iterative Lomres p Taxcmsolve Lobocg JXsSoe fames fup tomb asperge r spilu spl Tepolle sg svd test p umi pack Use solver utils warnings 11 3 1 Sparse Direct Solvers default solver SuperLU 4 0 included in SciPy real and complex systems both single and double precision optional umfpack real and complex systems double precision only recommended for performance wrappers now livein scikits umfpack check out the new scikits suitesparse by Nathaniel Smith Examples e import the whole module and see its docstring gt gt gt from scipy sparse linalg import dsolve gt gt gt help dsolve both superlu and umfpack can be used if the latter is installed as follows prepare a linear system gt gt gt import numpy as np gt gt gt from scipy import sparse Soe te ar oe epoca a 8 Si le 5
99. lecture notes Release 2013 2 beta euroscipy 2013 SciPy Users List scipy user scipy org scientific computing with Python high level data process ing in particular with the scipy package matplotlib users Q lists sourceforge net for plotting with matplotlib 140 Part Il Advanced topics Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 This part of the Scipy lecture notes is dedicated to advanced usage It strives to educate the proficient Python coder to be an expert and tackles various specific topics 142 CHAPTER Advanced Python Constructs author Zbigniew Jedrzejewski Szmek This chapter is about some features of the Python language which can be considered advanced in the sense that not every language has them and also in the sense that they are more useful in more complicated programs or libraries but not in the sense of being particularly specialized or particularly complicated It is important to underline that this chapter is purely about the language itself about features supported through special syntax complemented by functionality of the Python stdlib which could not be implemented through clever external modules The process of developing the Python programming language its syntax is unique because it is very transparent proposed changes are evaluated from various angles and discussed on public mailing lists and the final decision takes into account the balance be
100. looking at the pipeline view By right clicking on the nodes of the pipeline you can add new modules Quiz Why is it not possible to add a VectorCutPlane to the vectors created by mayavi mlab quiver3d Different sources scatters and fields Tip Data comes in different descriptions A 3D block of regularly spaced value is structured it is easy to know how one measurement is related to another neighboring and how to continuously interpolate between these We can call such data a field borrowing from terminology used in physics as it is continuously defined in space A set of data points measured at random positions in a random order gives rise to much more difficult and ill posed interpolation problems the data structure itself does not tell us what are the neighbors of a data point We call such data a scatter Unstructured and unconnected data a scatter Structured and connected data a field mlab points3d mlab quiver3d mlab contour3d Data sources corresponding to scatters can be created with mayavi mlab pipeline scalar scatter or mayavi mlab pipeline vector scatter field data sources can be created with mlab pipeline scalar field ormlab pipeline vector field Exercice Create a contour for instance of the magnetic field norm by using one of those functions and adding the right module by clicking on the GUI dialog 2 Create the right source to apply a vector cut plane and reproduce the pi
101. matrix mtx size the number of nonzeros same as self getnnz mtx shape the number of rows and columns tuple data usually stored in NumPy arrays 11 2 2 Sparse Matrix Classes Diagonal Format DIA very simple scheme diagonals in dense NumPy array of shape n diag length fixed length gt waste space a bit when far from main diagonal subclass of data matrix sparse matrix classes with data attribute offset for each diagonal is the main diagonal negative offset below positive offset above e fast matrix vector sparsetools fast and easy item wise operations manipulate data array directly fast NumPy machinery constructor accepts dense matrix array sparse matrix shape tuple create empty matrix data offsets tuple no slicing no individual item access use rather specialized solving PDEs by finite differences with an iterative solver 11 2 Storage Schemes 214 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Examples e create some DIA matrices gt gt gt data np array 1 2 3 4 repeat 3 axis 0 gt gt gt data array ile un oue vs xoa 2 3p 4l e dag All gt gt gt offsets np array i0 1 2 gt gt gt mtx sparse dia matrix data offsets shape 4 4 gt gt gt mtx lt 4x4 sparse matrix of type type numpy into4 with 9 stored elements 3 diagonals in
102. modified data re appears on the RHS 8 1 5 Findings in dissection data type dile Ll ndarray e memory block may be shared base data data type descriptor structured data sub arrays byte order casting viewing astype view e strided indexing strides C F order slicing w integers as strided broadcasting stride tricks diag CPU cache coherence 8 2 Universal functions 8 2 1 What they are Ufunc performs and elementwise operation on all elements of an array Examples np dol mp cubtract SoTovespecid sd x e Automatically support broadcasting casting The author of an ufunc only has to supply the elementwise operation Numpy takes care of the rest The elementwise operation needs to be implemented in C or e g Cython 8 2 Universal functions 173 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Parts of an Ufunc 1 Provided by user void ufunc_loop void xxargs int xdimensions int xsteps void xdata x int8 output elementwise function int8 input 1 INES input 2 x This function must compute the ufunc for many values at once in the way shown below a char xinput_1 ebhar argsl char input 2 charx args char output charx args 2 Int i DIT LI ii for i 05 3 dimensqonsq s q30 4 xoutput elementwise function x xinput 1 input_2 domu otl t 4S dero eus input 2 stepsll ou
103. ndimage zoom lena 2 gt gt gt zoomed_lena shape 1024 1024 In 135 subelor 151 OUE ol matptorlwb axes AxessSubploc object at 0x925Ff46c In 36 pl imshow shifted_lena cmap cm gray Out 356 mat plot lio image Axesimage Object ac 0x95995f60 Ens ISI Gus EET Qua Tego 19d x99 S05 In 39 etc 5 10 2 Image filtering from scipy import misc lena misc lena import numpy as np noisy lena np copy lena astype np float noisy lena lena std 0 5 np random standard_normal lena shape blurred_lena ndimage gaussian_filter noisy_lena sigma 3 median_lena ndimage median_filter blurred_lena size 5 from scipy import signal wiener lena signal wiener blurred lena 5 5 noisy lena Gaussian filter median filter Wiener filter Uy EI e Many other filters in scipy ndimage filters and scipy signal can be applied to images 5 10 Image processing scipy ndimage 120 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Compare histograms for the different filtered images 5 10 3 Mathematical morphology Mathematical morphology is a mathematical theory that stems from set theory It characterizes and transforms geometrical structures Binary black and white images in particular can be transformed using this theory the sets to be transformed are the sets of neighboring non zero valued pixels The theory was also extended to gray valued images
104. packages yolk U peg JUsers cburms ltocal 15 python2 5 sq4 te packages virtualenv 1l 2 py2 5 e9gg 2 7 5 pickle easy persistence Useful to store arbitrary objects to a file Not safe or fast In 1 import pickle In 2 l 1 None Stan In 3 packlewdumpi l tile test pkb Twy In 4 pickle load file test pkl Out 4 is Ll None stan Exercise Write a program to search your PYTHONPATH for the module site py path_site 2 8 Exception handling in Python It is highly unlikely that you haven t yet raised Exceptions if you have typed all the previous commands of the tutorial For example you may have raised an exception if you entered a command with a typo Exceptions are raised by different kinds of errors arising when executing Python code In your own code you may also catch errors or define custom error types You may want to look at the descriptions of the the built in Exceptions when looking for the right exception type 2 8 Exception handling in Python 39 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 2 8 1 Exceptions Exceptions are raised by errors in Python ZeroDivisionError integer division or modulo by zero TyvpeNrror umsuppotrcued operoend type s for qsmt In 3 DES usu Kevin DOT S mm Poi t IndexError list index out of range in I7 loea BttrrDuteErrors list object has no attribute Toobar As you can see
105. per loop Real incomplete SVDs e g computing only the first 10 eigenvectors can be computed with arpack available in Scipy sparse linalg eigsh Computational linear algebra For certain algorithms many of the bottlenecks will be linear algebra computations In this case using the right function to solve the right problem is key For instance an eigenvalue problem with a symmetric matrix is easier to solve than with a general matrix Also most often you can avoid inverting a matrix and use a less costly and more numerically stable operation Know your computational linear algebra When in doubt explore scipy linalg and use timeit to try out different alternatives on your data 10 4 Writing faster numerical code A complete discussion on advanced use of numpy is found in chapter Advanced Numpy page 159 or in the article The NumPy array a structure for efficient numerical computation by van der Walt et al Here we discuss only some commonly encountered tricks to make code faster Vectorizing for loops Find tricks to avoid for loops using numpy arrays For this masks and indices arrays can be useful Broadcasting Use broadcasting page 61 to do operations on arrays as small as possible before combining them n place operations 10 4 Writing faster numerical code 208 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In 1 a np zeros 1le7 In 2 timeit global a a Oxa 10 loop
106. prototypes fPIC In file included from home esc anaconda lib python2 7 site packages numpy core include numpy nda from home esc anaconda lib python2 7 site packages numpy core include numpy nda from home esc anaconda lib python2 7 site packages numpy core include numpy arri from COs doubles wrap c 2 06 home esc anaconda lib python2 7 site packages numpy core include numpy npy deprecated api h 11 2 gcc pthread shared build temp lanux xe6_64 2 cos_doubles o build temp linux x86 64 2 7 cos do S ls Burta COS doubles h cos doubles py cos cdoubles wrap c Setup py Cos doubles c cos doubles cos doubles so mnumpy s test cos doubles And as before we convince ourselves that 1t worked import numpy as np import pylab import cos doubles x np arange 0 2 np spi 0 1 y np empty like x cos_doubles cos_doubles_func x v py lakbzelot x y pylab show 14 4 SWIG 275 PY Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 14 5 Cython Cython is both a Python like language for writing C extensions and an advanced compiler for this language The Cython language is a superset of Python which comes with additional constructs that allow you call C functions and annotate variables and class attributes with c types In this sense one could also call it a Python with types In addition to the basic use case of wrapping native code Cython supports an additional u
107. py glo function calls in 14 9091 CPU seconds Ordered by internal time ncalls tottime percall cumtime percall filename lineno function 1 14 457 14 457 14 479 14 479 decomp py 849 svd i 0 054 0 054 0 054 0 054 method random sample of mtrand RandomS tate object 1 Ds ODE GO Zak 0021 Eunci ron base py 7645 asaerray chkErnibe 54 0 011 0 000 GO Oak 0 000 imnumpywcores dotbliss dot 2 0 005 0 002 DOS 0002 method any of numpy ndarray lt cbjeces 6 OOT 0 000 0 001 DoD Teas Py oq ame 6 OOOI 0 000 0 001 DEED Teas Py o Tq 14 0 001 Ore 0355010 0 0 000 i1nmumpy lrnalg lapack lute dsyevdj 19 OOTO C2000 0 001 0 000 twodim_base py 204 diag 1 DO OST 07 002 OOS acap 60 2lee pan 1 0001 0 001 quo ere alk 14 551 execfile WON 0 000 0000 C200 0DOD Germatrrax py 3259 __ array finalize 7 0 000 0 000 0 004 0001 Tica py 59 sym decorrelation 7 0 000 050 00 0 2002 0 000 Tinalg py 341 eigh 1 352 0 000 0000 0 000 QOO caes ame t eee al QD 0 000 qs 55 14 551 demo py 1 lt module gt 29 0 009 D 2101010 0 000 0 000 numeric py 180 asarray 29 0000 0 000 0 000 0 000 defmatrix py 193 new __ 29 OOOO C2006 0 001 D ODIO dermat rix py 43 asmabira x 2l 0 000 99 Dp 02000 Solum sp oo ps cL 41 OR 000 00 0 000 0 000 numpy core multiarray zeros 2e 000 000 0 000 02000 method transpose On NuMpy mcarray objects l 02000 02000 URS O2 00S Weawpy so rack tea Clearly the svd in decom
108. reusable functions are Thinking in terms of functions helps breaking the problem in small blocks 1 3 The interactive workflow IPython and a text editor 7 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 1 3 3 IPython Tips and Tricks The Python user manual contains a wealth of information about using IPython but to get you started we want to give you a quick introduction to three useful features history magic functions aliases and tab completion Like a UNIX shell IPython supports command history Type up and down to navigate previously typed commands In 1 x 10 In 2 SUP In 2 x 10 Python supports so called magic functions by prefixing a command with the character For example the run and whos functions from the previous section are magic functions Note that the setting automagic which is enabled by default allows you to omit the preceding sign Thus you can just type the magic function and it will work Other useful magic functions are e cd to change the current directory In I21 cd 7 tmp tmp e timeit allows you to time the execution of short snippets using the timeit module from the standard library In 3 timert x 10 10000000 Loops best ot 5 39 ns per loop e cpaste allows you to paste code especially code from websites which has been prefixed with the stan dard python prompt e g gt gt gt or with an ipython prompt e g in 3 In 5 cpast
109. robustness we can see that we get good error messages die Savona Imacebaeck most recent cakill hast IP Chon Input dioc ooo In module gt 1 cos mocule cos rune dob home esc git working scipy lecture notes advanced interfacing with c cython cos module so in cos Typebkrror a float is required Additionally it is worth noting that Cython ships with complete declarations for the C math library which simplifies the code above to become UE Gimpler example Of wrapping cos function from mgti n using Cychon TU from libc math cimport cos def lt cos_tunc arg return cos arg 14 5 Cython 277 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In this case the cimport statement is used to import the cos function 14 5 2 Numpy Support Cython has support for Numpy via the numpy pyx file which allows you to add the Numpy array type to your Cython code Le like specifying that variable i is of type int you can specify that variable a is of type numpy ndarray with a given dtype Also certain optimizations such as bounds checking are supported Look at the corresponding section in the Cython documentation In case you want to pass Numpy arrays as C arrays to your Cython wrapped C functions there is a section about this in the Cython wiki In the following example we will show how to wrap the familiar cos_ doubles function using Cython void cos_doubles double x in array double out
110. sdoubles 26 clean rim v libcos doubles so cos doubles o cos doubles pyc We can then compile this on Linux into the shared library 1ibcos_doubles so BS cos doubles c Cos doubles h cos doubles py makefile test cos doubles py make Gece e EPle cosccdoubpdescec 9 Cos U doubles 7o qoc shared Wl soname Libpcos doubles so o libcos_doubles so cos_doubiles o B is 14 3 Ctypes 270 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 cos doubles c cos doubles o libcos_doubles sox test_cos_doubles py cos_doubles h cos_doubles py makefile Now we can proceed to wrap this library via ctypes with direct support for certain kinds of Numpy arrays mnn HE cU Wr oa ja C EV Bune lon NI ECCE S aC IO Ie array as Vr m mm znpuc Using Che DUNDY CDyDOsJrD import numpy as np import numpy ctypeslib as npct from ctypes import c int f input type for the cos doubles function must be a double array with single dimension that is contiguous array ld double npct ndpointer dtype np double ndim 1 flags CONTIGUOUS load the library using numpy mechanisms qaod Moet load Library labeos lt doubtles Tam setup the return typs and argument types libcd cos_doubles restype None jpod cossdoublesssrgtvpes array l double array Id double caine def cos doubles func in array Out array return l 5cod cos doubles in array Out array len in array Note the inherent l
111. search button is quite useful inside the reference documentation of the two packages http docs scipy org doc numpy reference and http docs scipy org doc scipy reference Tutorials on various topics as well as the complete API with all docstrings are found on this website Numpy and Scipy Documentation SciPy v0 8 dev Reference Guide DRAFT next modules index f SciPy Release 0 8 dev Date February 11 2010 SciPy pronounced Sigh Pie is open source software for mathematics science and engineering e SciPy Tutorial o Introduction o Basic functions in Numpy and top level scipy o Special functions scipy special Table Of Contents SciPy o Integration scipy integrate Reference o Optimization optimize Next topic o Interpolation scipy interpolate B o Signal Processing signal SciPy Tutorial o Linear Algebra This Page o Statistics o Multi dimensional image processing ndimage o File IO scipy io Resources o Weave e Release Notes Show Source Scipy org website Edit pups Reference Quick search e Clustering package scipy cluster e Constants scipy constants e Fourier transforms scipy fftpack Go e Integration and ODEs scipy integrate Enter search terms or a module e Interpolation scipy interpolate class or function name e Input and output scipy io e Linear algebra scipy linalg e Maximum entropy models scipy maxentropy e Miscellaneous routines scipy
112. t number Of Supported uwmput Types See 27 number Or inp t args l number of output args 0 identity element never mind this mandel function name 8 2 Universal functions poco 180 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Mande li z gt computes awteratedezez C docstring O unused 8 2 4 Generalized ufuncs ufunc output elementwise_function input Both output and input can be a single array element only generalized ufunc output and input can be arrays with a fixed number of dimensions For example matrix trace sum of diag elements input shape n n output shape l e scalar m my gt m Matrix product input ol Shape my um input_2 shape n p output shape m p m mp a pP gt m P e This is called the signature of the generalized ufunc e The dimensions on which the g ufunc acts are core dimensions Status in Numpy e g ufuncs are in Numpy already e new ones can be created with PyUFunc FromFuncAndDataAndSignature e but we don t ship with public g ufuncs except for testing ATM gt gt gt import numpy core umath tests as ut gt gt gt ut matrix multiply signature m n n p m p gt gt gt x np ones 10 2 4 gt gt gt y mNp ones 10 4 5 gt gt gt Utematrix m ltiply x c sape TO A D e the last two dimensions became core dimensions and are mo
113. the clear indentation and in the absence of extra characters the resulting code is very nice to read compared to other languages Indentation depth Inside your text editor you may choose to indent with any positive number of spaces 1 2 3 4 However it is considered good practice to indent with 4 spaces You may configure your editor to map the Tab key to a 4 space indentation In Python x y the editor is already configured this way Style guidelines Long lines you should not write very long lines that span over more than e g 80 characters Long lines can be broken with the character gt gt gt long line Here is a very very long line that we break in two parts Spaces Write well spaced code put whitespaces after commas around arithmetic operators etc gt gt gt a 1 yes gt gt gt a 1 too cramped A certain number of rules for writing beautiful code and more importantly using the same conventions as anybody else are given in the Style Guide for Python Code 2 6 Input and Output To be exhaustive here are some information about input and output in Python Since we will use the Numpy methods to read and write files you may skip this chapter at first reading We write or read strings to from files other types must be converted to strings To write in a file gt gt gt f open workfile w opens the workfile file gt gt gt Lype tf type file gt gt
114. this chapter is to give you a flavour of what technologies exist and what their respective merits and shortcomings are so that you can select the appropriate one for your specific needs In any case once you do start wrapping you almost certainly will want to consult the respective documentation for your selected technique Chapters contents Introduction page 263 Python C Api page 264 Ctypes page 268 SWIG page 271 Cython page 276 Summary page 279 Further Reading and References page 279 Exercises page 280 14 1 Introduction This chapter covers the following techniques Python C Api e Ctypes e SWIG Simplified Wrapper and Interface Generator e Cython These four techniques are perhaps the most well known ones of which Cython is probably the most advanced one and the one you should consider using first The others are also important if you want to understand the wrapping problem from different angles Having said that there are other alternatives out there but having understood the basics of the ones above you will be in a position to evaluate the technique of your choice to see if it fits your needs The following criteria may be useful when evaluating a technology Are additional libraries required s the code autogenerated Does it need to be compiled s there good support for interacting with Numpy arrays 263 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013
115. to another function In 38 Va variable args In 39 va three x 1 y 2 args 2s three Ios Io ue Wort ed 2 4 9 Methods Methods are functions attached to objects You ve seen these in our examples on lists dictionaries strings etc 2 4 10 Exercises 2 4 Defining functions 26 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Fibonacci sequence Write a function that displays the n first terms of the Fibonacci sequence defined by e u 0 1 u 1 1 eu nt2 u n l1 un Exercise Quicksort Implement the quicksort algorithm as defined by wikipedia function quicksort array var list less greater if length array 2 return array select and remove a pivot value pivot from array for each x in array if x lt pivot then append x to less else append x to greater return concatenate quicksort less pivot quicksort greater 2 5 Reusing code scripts and modules For now we have typed all instructions in the interpreter For longer sets of instructions we need to change tack and write the code in text files using a text editor that we will call either scripts or modules Use your favorite text editor provided it offers syntax highlighting for Python or the editor that comes with the Scientific Python Suite you may be using e g Scite with Python x y 2 5 1 Scripts Tip Let us first write a script that is a file with a sequence of instructio
116. to be displayed in grey In 6 plt imshow lena cmap plt cm gray Create an array of the image with a narrower centering for example remove 30 pixels from all the borders of the image To check the result display this new array with imshow In I9 crop lena l nal o0 20730 320 We will now frame Lena s face with a black locket For this we need to create a mask corresponding to the pixels we want to be black The mask is defined by this condition y 256 2 3 256 eZ In 15 v x mpsogrid 02 5127 02542 7 x and y indices or pixels In 16 y shape x shape BIET ws le Gn Sele In 17 centerx centery 256 256 center of the image in 18 mask y Gcentery 2 F x cenberx 2 gt 230 x 2 F Circle then we assign the value O to the pixels of the image corresponding to the mask The syntax is extremely simple and intuitive In 19 lena mask 0 In 20 plt imshow lena Out 20 lt matplotlib image AxesImage object at 0xa36534c gt Follow up copy all instructions of this exercise in a script called 1ena locket py then execute this script in Python with run lena locket py Change the circle to an ellipsoid 3 5 3 Data statistics The data in populations txt describes the populations of hares and lynxes and carrots in northern Canada during 20 years gt gt gt data Nos loadt xe dalay popilaLlions txt gt gt gt year hares lynxes carrots data T trick columns
117. to variables poo pligaxes U 7 x bus Oe matplotlib axes Axes object at gt gt gt Olt pios year hares year fumes year Carrots L marp loi ib linesclime7D ODJECE ac 5 p Seal gt gt gt plt Tegend Hare Lynx ftCarrobt Leoc h 05 20 595 lt matplotlib legend Legend object at gt 3 5 Some exercises 76 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 80000 70000 60000 Hare 50000 Lynx Carrot 40000 30000 20000 10000 1500 1905 1910 1915 1920 Computes and print based on the data in populations txt 1 The mean and std of the populations of each species for the years in the period 2 Which year each species had the largest population 3 Which species has the largest population for each year Hint argsort amp fancy indexing of npara ie E SOT 4 Which years any of the populations is above 50000 Hint comparisons and np any 5 The top 2 years for each species when they had the lowest populations Hint argsort fancy indexing 6 Compare plot the change in hare population see help np gradient and the number of lynxes Check correlation see help np corrcoef all without for loops Solution Python source file 3 5 4 Crude integral approximations Write a function a b c that returns a ranges 0 1 x 0 1 x 0 1 c Form a 24x12x6 array containing its values in parameter Approximate the 3 d integral 1 p
118. using data indices indptr tuple gt gt gt data np array 1 4 5 2 3 6l 2s Indices np arra y I0 Wy 2r U cg PI ooo eeu emos dass lO 2 27 toll gt gt gt MLK Sparse CSC matrix data andices indptr Shape 3 3 gt gt gt mtx todense ere tease ii Os Zale O7 OF 505 2 95 OD Block Compressed Row Format BSR basically a CSR with dense sub matrices of fixed shape instead of scalar items block size R C must evenly divide the shape of the matrix M N three NumPy arrays indices indptr data indices is array of column indices for each block data is array of corresponding nonzero values of shape nnz R C subclass of cs matrix common CSR CSC functionality subclass of data matrix sparse matrix classes with data attribute fast matrix vector products and other arithmetics sparsetools constructor accepts dense matrix array sparse matrix shape tuple create empty matrix data ij tuple data indices indptr tuple e many arithmetic operations considerably more efficient than CSR for sparse matrices with dense sub matrices use like CSR 11 2 Storage Schemes 222 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 vector valued finite element discretizations Examples create empty BSR matrix with 1 1 block size like CSR gt gt gt mtx sparse bsr matrix 3 4 dtype np i
119. with SymPy 15 1 1 Using SymPy as a calculator SymPy defines three numerical types Real Rational and Integer The Rational class represents a rational number as a pair of two Integers the numerator and the denominator so Rational 1 2 represents 1 2 Rational 5 2 5 2 and so on gt gt gt from sympy import x gt gt gt a Rational 1 2 gt gt gt a 172 gt gt gt ax2 ilt SymPy uses mpmath in the background which makes it possible to perform computations using arbitrary precision arithmetic That way some special constants like e pi oo Infinity are treated as symbols and can be evaluated with arbitrary precision gt gt gt d puc eZ gt gt gt pi evalf cedido 9715595159179 gt gt gt pi texp 1 evalf 5 85987448204884 as you see evalf evaluates the expression to a floating point number There is also a class representing mathematical infinity called oo gt gt gt oo 99999 True gt gt gt OO di OG 15 1 2 Exercises 1 Calculate v2 with 100 decimals 2 Calculate 1 2 1 3 in rational arithmetic 15 1 3 Symbols In contrast to other Computer Algebra Systems in SymPy you have to declare symbolic variables explicitly gt gt gt from sympy import gt gt gt x Symbol x gt gt gt y Symbol y Then you can manipulate them psc an A X gt gt gt b x o y w 2 15 1 First Steps with SymPy 285 Python Scientific lecture n
120. 0 lt P i j lt I probability to go from state i to state 5 2 Transition rule Phew P Dold 3 all sum P axis 1 1 p sum 1 normalization Write a script that works with 5 states and e Constructs a random matrix and normalizes each row so that it 1s a transition matrix e Starts from a random normalized probability distribution p and takes 50 steps gt p_50 e Computes the stationary distribution the eigenvector of P T with eigenvalue 1 numerically closest to 1 gt p_stationary Remember to normalize the eigenvector I didn t e Checks if p_50 and p_stationary are equal to tolerance 1e 5 Toolbox np random rand dot np linalg eig reductions abs argmin comparisons all np linalg norm etc Solution Python source file 3 5 Some exercises 79 CHAPTER 4 Matplotlib plotting authors Nicolas Rougier Mike M ller Ga l Varoquaux Thanks Many thanks to Bill Wing and Christoph Deil for review and corrections 80 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Chapters contents e Introduction page 81 Python and the pylab mode page 82 pylab page 82 e Simple plot page 82 Plotting with default settings page 83 Instantiating defaults page 83 Changing colors and line widths page 84 Setting limits page 85 Setting ticks page 85 Setting tick labels page 86 Moving spines page 86 Adding a legend page 87 A
121. 0 0 Max storage 30 0 Name Project A OK Cancel TraitsUI simplifies the way user interfaces are created Every trait on a HasTraits class has a default editor that will manage the way the trait is rendered to the screen e g the Range trait is displayed as a slider etc In the very same vein as the Traits declarative way of creating classes TraitsUI provides a declarative interface to build user interfaces code from traits api import HasTraits Str Float Range from traitsui api import View class Reservoir HasTraits name Str max storage Float le6 desc Maximal storage hm3 max release Float 10 desc Maximal release m3 s head Float 10 desc Hydraulic head m efficiency Range 0 1 traits view View name max storage max release head efficiency title Reservoir resizable True energy_production self release Returns the energy production Wh for the given release m3 s Ton power 1000 x 9 81 x self head release x self efficiency return power x 3600 Tf name a5 mnaan s reservoir Reservoir name Project A max_storage 30 17 3 What are Traits 310 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 max release 100 0 head 60 efficiency O0 reservoir configure_traits gt mm Reservoir Max storage 30 0 Max release 100 0 Head 60 0 Efficiency 0 0
122. 2 Numpy Support Numpy contains some support for interfacing with ctypes In particular there is support for exporting certain attributes of a Numpy array as ctypes data types and there are functions to convert from C arrays to Numpy arrays and back For more information consult the corresponding section in the Numpy Cookbook and the API documentation for numpy ndarray ctypes and numpy ctypeslib For the following example let s consider a C function in a library that takes an input and an output array computes the cosine of the input array and stores the result in the output_array The library consists of the following header file although this is not strictly needed for this example we list it for completeness void cos_doubles double in array double out array int size The function implementation resides in the following C source file yi OC ude lt mAT Na AA Compute the cosine of each element in in array storing the result in de OULD etray wf void cos_doubles double in array double out array int size int 1 for i 0 i lt size i t out array lil Cos in array e And since the library is pure C we can t use distutils to compile it but must use a combination of make and gog m PHONY clean libces doubles s9 c cos doubles io geo shared wil soname libcos doubles so o Jibcos doubles so cos doubles o Cos doubles o lt lt cos doubles e gee e ire IC COs COubles e o cos
123. 2 bg De I2 6p aaae ele BLS ELEL aie E y G aara eel Midi ALE elisa esI gt gt gt isinstance camera np ndarray True You should just consider that an Image instance is a regular ndarray 16 1 2 What s to be found in scikit image Website http scikit image org Gallery of examples as in matplotlib or scikit learn http scikit image org docs dev auto_examples Different kinds of functions from boilerplate utility functions to high level recent algorithms e Filters functions transforming images into other images NumPy machinery Common filtering algorithms Data reduction functions computation of image histogram position of local maxima of corners etc e Other actions I O visualization etc 16 2 Input output data types and colorspaces I O skimage io gt gt gt from skimage import io Reading from files skimage io imread gt gt gt filename os path join skimage data dir camera png gt gt gt camera io imread filename 16 2 Input output data types and colorspaces 293 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Works with all data formats supported by the Python Imaging Library or any other I O plugin provided to imread with the plugin keyword argument Also works with URL image paths gt gt gt logo e A0 immeead 7 Ntitp 77 scikil image org stalic img loge png Saving to files gt gt gt 190 4mseveo
124. 2 x ypos An extra argument counter_arr has been added to illustrate that the function may be called several times for a single time step until solver convergence The counter array is defined as gt gt gt counter np zeros 1 dtype np urntl65 The trajectory will now be computed gt gt gt from scipy integrate import odeint gt gt gt time vec np linspace 0 4 40 gt gt gt yvec info odeint calc derivative 1 time vec args counter full output True Thus the derivative function has been called more than 40 times which was the number of time steps gt gt gt counter arrayv l29 dtype uint o and the cumulative number of iterations for each of the 10 first time steps can be obtained by gt gt gt GNO meee 99 array lol 35 43 429 Dor 57 597 637 6a 09 Geype inesZ Note that the solver requires more iterations for the first time step The solution yvec for the trajectory can now be plotted 1 0 0 8 d Oo y position m I 0 2 000 05 10 15 20 25 30 35 40 Time s Another example with scipy integrate odeint will be a damped spring mass oscillator 2nd order oscillator The position of a mass attached to a spring obeys the 2nd order ODE y 2 eps wo y wo 2 y 0 with wo 2 k m with k the spring constant m the mass and eps c 2 m wo with c the damping coefficient For this example we choose the parameters as gt gt gt mass 0 5 kg gt gt gt kspring
125. 4 Other Types of Plots examples and exercises Regular Plot pl plot Plot lines and or markers page 92 4 4 Other Types of Plots examples and exercises 90 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Bar Plot pl bar Make a bar plot with rectangles page 92 Imshow pl imshow Display an image to current axes page 93 Pie Chart pl pie Make a pie chart of an array page 95 Multiplot pl subplot Plot several plots at once page 95 3D plots Plot 2D or 3D data 7 777 LEUTE TIILI in page 96 page 97 Contour Plot pl contour Draw contour lines and filled contours page 93 Quiver Plot pl quiver Plot a 2 D field of arrows 4 A F A 5 H y o gt gt gt a a S y A A V A X VOX OX page 94 Grid pl grid Draw ticks and grid page 94 Polar Axis Plot anything using polar axis page 95 Text pl text r Draw any kind of text enn gpyc X rfr ax SVT Wong LE vm 2 a n page 96 4 4 Other Types of Plots examples and exercises 91 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 4 1 Regular Plots Hint You need to use the fill between command Starting from the code below try to reproduce the graphic on the right taking care of filled areas In 256 X np linspace np pi np pr n endpoint True Y Messin 2
126. 425369 Usa 7olosse de79602L 5 gt gt gt np random seed 1234 Setting the random seed Exercise Creating arrays using functions e Experiment with arange linspace ones zeros eye and diag Create different kinds of arrays with random numbers e Try setting the seed before creating an array with random values Look at the function np empt y What does it do When might this be useful 3 1 6 Basic data types You may have noticed that in some instances array elements are displayed with a trailing dot e g 2 vs 2 This is due to a difference in the data type used SSS a Np array 1 2 3 gt gt gt a dtype deyoe int 6d 2 gt gt np array l r 2 7 361 gt gt gt b dtype dtype floato4 Tip Different data types allow us to store data more compactly in memory but most of the time we simply work with floating point numbers Note that in the example above NumPy auto detects the data type from the input You can explicitly specify which data type you want 3 1 The Numpy array object 46 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt c np array i 2 3 dtype tloat gt gt gt c dtype dtype floato4 The default data type is floating point gt gt gt a np ones 3 3 gt gt gt a dtype dtype floato4 There are also other types Complex Bog ip eet Eu ol gt gt gt d dtype dtyoe complexl2zs Bool g
127. 82 double Xt 3 Du S2 6 In 83 double it Traceback most recent call last Files stdrimne line L xn smodule TypeError double it takes exactly 1 argument 0 given Optional parameters keyword or named arguments In 84 def double it x 2 E C return x gt 2 In 85 double 160 Cnr Seis ut In 86 double_it 3 Out Sol 6 Keyword arguments allow you to specify default values Warning Default values are evaluated when the function is defined not when it is called This can be problematic when using mutable types e g dictionary or list and modifying them in the function body since the modifications will be persistent across invocations of the function In 124 bigx 10 In 125 def double it x bigx RACE return x x 2 In 126 bigx 1e9 Now really big In 128 double it Outll289 1 e 20 Tip More involved example implementing python s slicing In 98 def slicer seq start None stop None step None ESSA TUM kement Pas er python slicing eee return seq start stop step In 10i rhyme ones Trish two fish red fish lt blue fish splac In 102 rhyme Oni Oe ie kone oppshet wos fase Med pie uet Satire In 103 slicer chyme 2 4 Defining functions 23 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Oue LOSI i nety CpusmetesTqwOt Fave t aed Yrs 5 Atle ek In 104 slicer rhyme step 2 Our rod
128. 9359 4 0325 4 Pe 45 141 7 Sore SCNCMES Lucus m mo eae CERRO R9 3 ELA GSE EEE ESS SE HH 11 3 Linear System SOIVeIs 11 26 9 tc ee SOE 039 o RO oxox o EO XO EE x ER EAS 11 4 Other Interesting Packages 2 2x oom xo om x owO oBom xo POXxOROROx EO RO X OR xo 9 ses Image manipulation and processing using Numpy and Scipy 12 1 Opening and wring to image files a sss es ds XR x deeb ec ee HERE Daw ee X X3 12 2 Displaying Mages sasorot RHEE daia ei a a a a a a S 12 5 Basic quanpuldiOlS 4265456664685 BRP 9339 OP EGRI C X E GES EEE RE E E X E 124 Image HIE se creada m OEE GSR OROROdtESe e ko RE EY CHEE RELGE SE o ee RO d d 12 9 Foaie CXIEIOLIOIE cain dew hee eh OS PRG SOE EH Ree Ge Oa ek EURO P ox 12 6 Measuring objects properties ndimage measurements Mathematical optimization finding minima of functions 13 1 Knowing your problemi 0x6 xk ROGO 39 9X Xo ox 4 OR s 9 ORO 9 3xOH 4 4 9 ED 13 2 Areview of the Gillcrenl optimizers gt se eG 9IxCEROS OR OSOROE Ws Xo EOE Ew 5o X x1 13 3 Practical guide to optimization withscipy 2222s 13 4 Special case non linear least squares aooo 13 5 Optimization with constraints 4 lt 4 444264444 4RRREREeEE REL OE RO 9 OR E S Interfacing with C I3 SucclH HO aoi 6 x99 5 9903 m Xx yk d hSUS OB HS POE NOS S 5S Po EON RO EE DG Id NOI C Ap saose 915238 9 3 5 519 x4 X 84 9 R08 9039 Oe 9 S oe EXE SS 9s Ie ee uu wes oR ere Roe EIAS ER iW REA Kex E
129. DIAgonal format gt gt gt mtx todense Matra xi WO S9 Wily dex Ze WO Al he us Sy gus Ore ee e AN gt gt gt data np arange 12 reshape 3 4 1 gt gt gt data arraz i gt 1 Ze Sy 4 Sy 67 dy oul Ey Oy 227 gt gt gt mtx sparse dia_matrix data offsets shape 4 4 gt gt gt mtx data array i 1 25 Sy 4 ioc Op Nee ally e GEL XEM LS gt gt gt mtx offsets array I 0p l 2 dtyoe int 32 gt gt gt print mtx 070 1 i 3 2 25 D2 gt O o d obs 005 2 27 d 6 35 2 7 Oat 271 11 as 12 gt gt gt mtx todense Mee oae lee Oy d 0 Ee ge dia SEA OE On oS Ol Or O Ty sig explanation with a scheme offset row 2 9 ls 10 O 3 cL Wc 12 2 3 3 7 4 e matrix vector multiplication 11 2 Storage Schemes 215 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt vec np ones 4 gt gt gt vec array Is ae IET dei gt gt gt mtx vec aminan Zs IEOR oma REIR gt gt gt mtx toarray vec cuu Ora TERS Cale E ne Diy Ore ql D vs Ging SU Dots 30 Ox Jes 4 List of Lists Format LIL row based linked list each row is a Python list sorted of column indices of non zero elements rows stored in a NumPy array dt ype np object non zero values data stored analogously efficient for constructing sparse matrices incrementally constructor a
130. Documentation e Annotating axis e annotate command Tip Let s annotate some interesting points using the annotate command We chose the 27 3 value and we want Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 to annotate both the sine and the cosine We ll first draw a marker on the curve as well as a straight dotted line Then we ll use the annotate command to display some text with an arrow i 2 Ipupu gi PLeaplow ley ule 0 7 Nosacosdc ly color blue lvngswrdtl 2 5 limestyle bil SCabeer lc Je Dipeces a Jg SO color blue pLeannotate Ce Ssin Viract 2 pi so Virac sqre os i4 2 3s 4 xy Ly mpssin c y x lt yocoords daca xytext tl0 30 textooordse orrset Points onusize 16 arrowprops dict arrowstyle gt connectionstyle arc3 rad 2 pieplot t tl 10 mp sim c Color red lanewadth 2 5 lwnestyle pl scetcer c lhnpsen t w lz 20 color red pcarmnmnotute r Scosi iraciZ pI o I Aa rac Ta XV E NE ecos ENP xycoords data xytexte 90 50 textcoordse otrset points Tvonutsrze 1l6 arrowprops dict arrowstyle gt connectionstyle arc3 rad 2 4 2 10 Devil is in the details sin 22 2X3 w cosine p4 sine Hint Documentation e Artists e BBox Tip The tick labels are now hardly visible because of the blue and red lines We can make them bigger and we can also adjust their p
131. Does it support C Before you set out you should consider your use case When interfacing with native code there are usually two use cases that come up Existing code in C C that needs to be leveraged either because it already exists or because it is faster Python code too slow push inner loops to native code Each technology is demonstrated by wrapping the cos function from math h While this is a mostly a trivial example it should serve us well to demonstrate the basics of the wrapping solution Since each technique also includes some form of Numpy support this is also demonstrated using an example where the cosine is computed on some kind of array Last but not least two small warnings e All of these techniques may crash segmentation fault the Python interpreter which is usually due to bugs in the C code e All the examples have been done on Linux they should be possible on other operating systems You will need a C compiler for most of the examples 14 2 Python C Api The Python C API is the backbone of the standard Python interpreter a k a CPython Using this API it is possible to write Python extension module in C and C Obviously these extension modules can by virtue of language compatibility call any function written in C or C When using the Python C API one usually writes much boilerplate code first to parse the arguments that were given to a function and later to construct the return type
132. E 19 5 Putting it all together face recognition 345 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 predict on new images for i in range 10 print lfw people target names clf predict X test pca i 01 1 _ pl imshow X test i reshape 50 37 cmap pl cm gray _ raw input 19 6 Linear model from regression to sparsity Diabetes dataset The diabetes dataset consists of 10 physiological variables age sex weight blood pressure measure on 442 patients and an indication of disease progression after one year gt gt gt diabetes datasets load diabetes gt gt gt diabetes X train diabetes data 20 gt gt gt diabetes X test diabetes data 20 gt gt gt diabetes y train diabetes target 20 gt gt gt diabetes y test diabetes target 20 The task at hand is to predict disease prediction from physiological variables 19 6 1 Sparse models To improve the conditioning of the problem uninformative variables mitigate the curse of dimensionality as a feature selection preprocessing etc it would be interesting to select only the informative features and set non informative ones to 0 This penalization approach called Lasso can set some coefficients to zero Such methods are called sparse method and sparsity can be seen as an application of Occam s razor prefer simpler models to complex ones gt gt gt from sklearn import linear model gt gt gt r
133. Error Los boe 7 3 2 Using generators to define context managers When discussing generators page 145 it was said that we prefer generators to iterators implemented as classes because they are shorter sweeter and the state is stored as local not instance variables On the other hand as described in Bidirectional communication page 146 the flow of data between the generator and its caller can be bidirectional This includes exceptions which can be thrown into the generator We would like to implement context managers as special generator functions In fact the generator protocol was designed to support this use case Qcontextlib contextmanager def some generator arguments eem Ery yield lt value gt finally lt cleanup gt The contextlib contextmanager helper takes a generator and turns it into a context manager The gen erator has to obey some rules which are enforced by the wrapper function most importantly it must yield exactly once The part before the yield is executed from enter the block of code protected by the con text manager is executed when the generator is suspended in yield and the rest is executed in ___exit_ If an exception is thrown the interpreter hands it to the wrapper through exit_ arguments and the wrapper function then throws it at the point of the yield statement Through the use of generators the context manager is shorter and simpler Let s rewrite the closing example as
134. Matrices e the memory that grows like nx 2 e small example double precision matrix gt gt gt import numpy as np gt gt gt import matplotlib pyplot as plt gt gt gt x np linspace 0 leo 10 sac pli plota 8 0 4xx22 7 lec lt matplotlib lines Line2D object at gt gt gt plt xlabel size n lt mMatploulionvext Text obDJect at 2 42 mocpIve3oels memory IMEI mcupiobtlubolvcorteleoctb ODJEct at sse CHAPTER 11 Sparse Matrices in SciPy 11 1 2 Sparse Matrices vs Sparse Matrix Storage Schemes e sparse matrix is a matrix which is almost empty storing all the zeros is wasteful gt store only nonzero items e think compression pros huge memory savings cons depends on actual storage scheme usually does not hold 211 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 11 1 3 Typical Applications solution of partial differential equations PDEs the finite element method mechanical engineering electrotechnics physics graph theory nonzero at i jJ means that node i is connected to node j 11 1 4 Prerequisites recent versions of e numpy SCipy e matplotlib optional ipython the enhancements come handy 11 1 5 Sparsity Structure Visualization e Spy frommatplotlib example plots 11 1 Introduction 212 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 11 2 Storage
135. PDATE IE COPY i Ballce The owndata and writeable flags indicate status of the memory block See also array interface 8 1 3 Data types The descriptor dt ype describes a single item in the array type scalar type of the data one of int8 int16 float64 et al fixed size str unicode void flexible size gt gt gt np dtype int type type numpy int64 gt gt gt np dtype int itemsize 8 gt gt gt np dtype int byteorder po Example reading wav files The wav file header 8 1 Life of ndarray 162 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 byte unsigned little endian integer e 44 byte block of raw data in the beginning of the file 4 byte unsigned little endian integer 4 byte unsigned little endian integer e followed by data size bytes of actual sound data The wav file header as a Numpy structured data type gt gt gt wav header dtype np dtype heb ba sere ub flexible sized scalar type item size 4 Me Me SS IG Meca little endian unsigned 32 bit integer PEOUMAG 4 Sog 4 byte string Wok tie cts rea imp store vaudiro Eme Yuzu iin Se heme la Ae more of the same sample rate sgg byte rate Tu ock o Lia Cis bits per samplet uz oua ad OCS SU ie wes airas quss OB data size gd the sound data itself cannot be represented here it
136. Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 EuroScipy tutorial team Editors Valentin Haenel Emmanuelle Gouillart Ga l Varoquaux http scipy lectures github com August 22 2013 2013 1 163 g0e5f47c Getting started with Python for science Scientific computing with tools and workflow Scientific Python building blocks The interactive workflow Python and a text editor The Python language Defining functions Reusing code scripts and modules Input and Output Standard Library Exception handling in Python Object oriented programming OOP NumPy creating and manipulating numerical data The Numpy array object Numerical operations on arrays More elaborate arrays Advanced operations Some exercises Matplotlib plotting Figures Subplots Axes and Ticks Other Types of Plots examples and exercises Beyond this tutorial Quick references Scipy high level scientific computing File input output scipy io Special functions scipy special Linear algebra operations scipy linalg Fast Fourier transforms scipy fftpack Optimization and fit scipy optimize Statistics and random numbers scipy stats Interpolation scipy interpolate Numerical integration scipy integrate Signal processing scipy signal 5 10 Image processing scipy ndimage Contents II 10 11 12 13 14 5 11 Summary exercises on scientific computing s osos oa e e e e e e e Getting help and finding documentatio
137. S Broyden Fletcher Goldfarb Shanno algorithm refines at each step an approximation of the Hes sian An ill conditionned quadratic function ee On a exactly quadratic function BFGS is not as fast as Newton s method but still very fast An ill conditionned non quadratic function Here BFGS does better than Newton as its empirical estimate of the curvature is better than that given by the Hessian An ill conditionned very non quadratic function gt gt gt def f x The rosenbrock function zx return 5c 1 9005 95352 x 1 gt gt gt def fprime x return np arrave c2e5 uwL cc xs sp seo s2 0 c p ses 2 gt gt gt optimize rmin brgs r l2 2 fprime fprime Optimization terminated successfully Current tunccvon value 02000000 heEerart ions 96 Function evaluations 24 Gradient evaluations 24 array 100000017 2200000076 1 L BFGS Limited memory BFGS Sits between BFGS and conjugate gradient in very high dimensions gt 250 the Hessian matrix is too costly to compute and invert L BFGS keeps a low rank version In addition the scipy version scipy optimize fmin l bfgs b includes box bounds gt gt gt def f x The rosenbrock function he return 5s cecus gt gt gt def fprime x E return pit 0 245409 sO xcd pd eroe ime bas 2 comete sores Sete 2 pO Opi qm dzesdqcmmem barge bb Gr 2 e dporime tcprcwme arcay 1 00000005 TENDO esa iG pM Se
138. SEND imme oa salis esser oo eei Ep r E x ES Out 5 Clx sin x C2 cos x Keyword arguments can be given to this function in order to help if find the best possible resolution system For example if you know that it is a separable equations you can use keyword hint separable to force dsolve to resolve it as a separable equation In 6 dsolve sin x cos f x cos x sin f x f x diff x f x hint separable Out 6 log 1 sin f x 2 2 C1 log 1 sin x 2 2 15 5 Linear Algebra 289 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 15 5 3 Exercises 1 Solve the Bernoulli differential equation x f x diff x f x f x 2 Warning TODO correct this equation and convert to math directive 2 Solve the same equation using hint Bernoulli What do you observe 15 5 Linear Algebra 290 CHAPTER 16 Scikit image image processing author Emmanuelle Gouillart scikit image 1s a Python package dedicated to image processing and using natively NumPy arrays as image objects This chapter describes how to use scikit image on various image processing tasks and insists on the link with other scientific Python modules such as NumPy and SciPy See also For basic image manipulation such as image cropping or simple filtering a large number of simple operations can be realized with NumPy and SciPy only See mage manipulation and processing using Numpy and Scipy
139. Scientific lecture notes Release 2013 2 beta euroscipy 2013 stride diagonals py Challenge Pick diagonal entries of the matrix assume C memory order gt gt xX No array Luxe Sly 4 oF EX ur Xe EP eli e mST S 2 Doc Xx diag as serided x shdpe 35 strides i 22 Pick the first super diagonal entries 2 6 And the sub diagonals Hint to the last two slicing first moves the point where striding starts from Solution Pick diagonals gt gt gt x diag as strided x shape 3 strides 3 1 x itemsize gt gt gt x diag array ll 5 91 dtybe tcuts2 Slice first to adjust the data pointer gt gt gt das strideg x 0 l1l shape e 2 Strides 371 x itemsize array 25 dtre InCo as strideg x l 0 shape 2 lyp strides 3 1l x 1Cemsize array 4 8 dtype int32 Note gt gt gt y np diag x k 1 gt gt gt y array 2 6 dtype int32 However aoe y i lags owndata True It makes a copy See also stride diagonals py Challenge Compute the tensor trace gt gt gt x np arange 5 5 5 5 reshape 5 5 5 5 gt gt gt s 0 gt gt gt for i in xrange 5 for j in xrange 5 s x guck by striding and using sum on the result gt gt gt y as strided x shape 5 5 strides TODO TODO gt gt gt 92 gt gt gt assert s s2 Solution 8 1 Life of ndarray 171 Python Scientific
140. _mesh contour3d Enter search terms or a module e class or function name gt Finally two more technical possibilities are useful as well n Ipython the magical function psearch search for objects matching patterns This is useful if for example one does not know the exact name of a function 3 import numpy as np 4 psearch np diagx drag sdiagf ilat agonal e numpy lookfor looks for keywords inside the docstrings of specified modules in 45 numpy lockror convolution Searcm Lesules for convolution numpy convolve Returns the discrete linear convolution of two one dimensional sequences MuUMpY Dare Vert Return the Bartlett window numpy corre late Discrete linear correlation of two l dimensional sequences In 46 numpy lookfor remove module os Search results for remove os remove remove path removedirs removedirs path ageing 19mm ele Cp ene b spi rye pura de path walk Directory tree generator f everything listed above fails and Google doesn t have the answer don t despair Write to the mailing list suited to your problem you should have a quick answer if you describe your problem well Experts on scientific python often give very enlightening explanations on the mailing list Numpy discussion numpy discussion scipy org all about numpy arrays manipulating them in dexation questions etc 139 Python Scientific
141. a T LO loops best of 3 106 ms per loop Using numexpr can be useful to automatically optimize code for such effects Use compiled code The last resort once you are sure that all the high level optimizations have been explored is to transfer the hot spots i e the few lines or functions in which most of the time is spent to compiled code For compiled code the preferred option is to use Cython it is easy to transform exiting Python code in compiled code 10 4 Writing faster numerical code 209 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 and with a good use of the numpy support yields efficient code on numpy arrays for instance by unrolling loops 10 4 1 Additional Links f you need to profile memory usage you could try the memory profiler f you need to profile down into C extensions you could try using gperftools from Python with yep f you would like to track performace of your code across time i e as you make new commits to your repository you could try vbench f you need some interactive visualization why not try RunSnakeRun 10 4 Writing faster numerical code 210 author Robert Cimrman 11 1 Introduction dense matrix is mathematical object data structure for storing a 2D array of values important features e memory allocated once for all items usually a contiguous chunk think NumPy ndarray fast access to individual items 11 1 1 Why Sparse
142. a generator Qcontextlib contextmanager def closing ob try yield obj finally ob3 closet Let s rewrite the assert raises example as a generator Qcontextlib contextmanager def assert raises type try yield except type return except Exception as value raise AssertionError wrong exception type else raise AssertionError exception expected Here we use a decorator to turn generator functions into context managers 7 3 Context managers 158 CHAPTER 8 Advanced Numpy author Pauli Virtanen Numpy is at the base of Python s scientific stack of tools Its purpose is simple implementing efficient operations on many items in a block of memory Understanding how it works in detail helps in making efficient use of its flexibility taking useful shortcuts and in building new work based on it This tutorial aims to cover e Anatomy of Numpy arrays and its consequences Tips and tricks Universal functions what why and what to do if you want a new one Integration with other tools Numpy offers several ways to wrap any data in an ndarray without unnecessary copies Recently added features and what s in them for me PEP 3118 buffers generalized ufuncs Prerequisites e Numpy gt 1 2 preferably newer Cython gt 0 12 for the Ufunc example PIL used in a couple of examples In this section numpy will be imported as follows gt gt gt import numpy as np 159
143. a resulting new array Ye Example or wrapping the coSs unction from methi using che Numo C API 27 include Python include lt numpy arrayobject h gt include lt math h gt wrapped cosine Tunction 7 Static PyObJect cos func nmnp FPyObDJect selt PyvObJeocte args PyArrayoDJect rin array PyObject o Ne agen 142 Python C Api 8 Ja ES Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 NpyIter xin iter NpylIter out iter NpyIter IterNextFunc xin iternext NpyIter IterNextFunc xout_iternext parse single numpy array argument x af lyro Pars rup e arogo Ol GPyArray lyoe Ginearray return NULL pe TCONMSETUCE Che output array like Cho Gnpve array 27 out array PyArray_NewLikeArray in_array NPY_ANYORDER NULL 0 if out array NULL return NULL create the iterators in iter NpyIter New in array NPY ITER READONLY NPY KEEPORDER NPY NO CASTING NULL if in iter NULL goto fail out iter NpyIter New PyArrayObject x out array NPY ITER READWRITE RIEGO E EIC ESRB S ENEY OS CES TENES ODDS 1f out _ iter NULL NpyIter Deallocate in iter goto fail in iternext NpyIter GetIterNext in iter NULL out iternext NpyIter GetIterNext out iter NULL if in iternext NULL out iternext NULL NpyIter Deallocate in iter NpyIter Deallocate out iter goto tail double x in dataptr double xx NpyIte
144. accessing array data Thus the original array is not copied in memory You can use np may share memory to check if two arrays share the same memory block Note however that this uses heuristics and may give you false positives When modifying the view the original array is modified as well gt gt gt a np arange 10 gt gt gt a array pO ly Zu 37 4 2 Gr Ie e J gt gt gt bD al 2 gt gt gt b amman gU 2 a Ss gt gt gt np may_share_ memory a b True gt gt gt b 12 gt gt gt b Burg M Dr 4 O Soll gt gt gt a arcay Me ibe oe cy 4 57 5 qe oF 91 gt gt gt a np arange 10 gt gt gt c a 2 copy force a copy gt gt COl 12 gt gt gt a array Or de Se WR By OR J OG 9 2o NO Mey Share IMs v ee False This behavior can be surprising at first sight but it allows to save both memory and time 3 1 The Numpy array object 52 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Worked example Prime number sieve 012345678 910111213 XPI DN PS PN DN DAL EP XII MM LDIXxIMID 4 kbd Tt AI OTI DD VN Compute prime numbers in 0 99 with a sieve e Construct a shape 100 boolean array is prime filled with True in the beginning gt gt gt is prime np ones 100 dtype bool e Cross out 0 and 1 which are not primes gt gt gt is prime 2 0 For each integer j starting from 2 cross out its higher multip
145. adient descent algorithms is that it tends to oscillate across a valley each time following the direction of the gradient that makes it cross the valley 13 2 A review of the different optimizers 252 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 The conjugate gradient solves this problem by adding a friction term each step depends on the two last values of the gradient and sharp turns are reduced Table 13 3 Conjugate gradient descent iterations function calls Error on f x e 40 60 80 100 120 An ill conditionned non quadratic function iterations n function calls a e dl Methods based on conjugate gradient are named with cg in scipy The simple conjugate gradient method to minimize a function is scipy optimize fmin cg Error on f x An ill conditionned very non quadratic function gt gt gt def f x The rosenbrock function return 25 Sex oS Colt sO eZ eZ po Oprtmuze rmulnecgorpp2 2 Optimization terminated successfully Current Smncetsonm value 0 000000 Tiere tons 3 Ene dcus 3919 1 29 Gradient evaluations 30 array 0999989698 02999 99 3554 These methods need the gradient of the function They can compute it but will perform better if you can pass them the gradient gt gt gt def fprime x return Ne array 2 5941 Sc 44x 0 bp e Osee ze ee qr epo 2 gt gt gt optimize fmin cg f
146. ading File demo2 py import sys def print_a Prines el print a print sys argv if name man mee Print S Importing it In 11 import demo2 le In 12 import demo2 Running it In 13 run demo2 b a 2 5 5 Scripts or modules How to organize your code Note Rule of thumb e Sets of instructions that are called several times should be written inside functions for better code reusability Functions or other bits of code that are called from several scripts should be written inside a module so that only the module is imported in the different scripts do not copy and paste your functions in the different scripts How module are found and imported When the import mymodule statement is executed the module mymodule is searched in a given list of directories This list includes a list of installation dependent default path e g usr lib python as well as the list of directories specified by the environment variable PYTHONPATH The list of directories searched by Python is given by the sys path variable 2 5 Reusing code scripts and modules 31 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In 1 import sys in 2 sys path Out 2 s D 7g nome varogquau local bin Cyne TID E on 1 home varoquau local lib python2 7 site packages Lusc 135 bowthon27 dystebackages Tusr local lib python2 7 ddist packages Modules must be locat
147. ager enter try do something var finally manager exit In other words the context manager protocol defined in PEP 343 permits the extraction of the boring part of a try except finally structure into a separate class leaving only the interesting do something block 1 The enter method is called first It can return a value which will be assigned to var The as part is optional if it isn t present the value returned by __ ent er___is simply ignored 2 The block of code underneath with is executed Just like with try clauses it can either execute success fully to the end or it can break continue or return or it can throw an exception Either way after the block is finished the __e xit__ method is called If an exception was thrown the information about the exception is passed to exit which is described below in the next subsection In the normal case exceptions can be ignored just like ina finally clause and will be rethrown after exit is finished Let s say we want to make sure that a file is closed immediately after we are done writing to it gt gt gt class closing object def init__ self obj self obj obj def enter self return self obj 7 3 Context managers 156 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 def exit self xargs 2 self obj close gt gt gt with closing open tmp file w as f fiwrice the conten tsn Here we h
148. al functions or as classes witha ca11 method or in theory even as lambda functions Let s compare the function and class approaches The decorator expression the part after can be either just a name or a call The bare name approach is nice less to type looks cleaner etc but is only possible when no arguments are needed to customise the decorator Decorators written as functions can be used in those two cases gt gt gt def simple decorator function print doing decoration return function gt gt gt simple_ decorator 7 2 Decorators 149 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 def function lt print inside function doing decoration z Emer Lon inside function gt gt gt def decorator_with_arguments arg print defining the decorator def decorator function in this inner function arg is available too print doing decorat Lon p arg return function return _decorator gt gt gt decorator_with_arguments abc def function print inside function defining the decorator doing decoration abc gt gt gt function inside function The two trivial decorators above fall into the category of decorators which return the original function If they were to return a new function an extra level of nestedness would be required In the worst case three levels of nested functions gt gt gt def replacing_decorator_with_args arg print defining the de
149. alls using the magic xxxx fired method from traits api import HasTraits Instance DelegatesTo Float Range Event from reservoir import Reservoir class ReservoirState HasTraits Keeps track of the reservoir state given the initial storage For the simplicity of the example the release is considered in hm3 timestep and not in m3 s n m reservoir Instance Reservoir min storage Float max storage DelegatesTo reservoir min release Float max release DelegatesTo reservoir state attributes storage Range low min storage high max_storage control attributes inflows Float desc Inflows hm3 release Range low min_release high max_release spillage Float desc Spillage hm3 update storage Event desc Updates the storage to the next time step def update storage fired self update storage state new storage self storage self release self inflows self storage min new storage self max storage overflow new storage self max storage self spillage max overflow 0 def print_state self print Storage tRelease tInflows tSpillage Str format Ye a foin 4 7e2f for in range 4 i print str_format format self storage self release self inflows self spillage print s 79 if name main projectA Reservoir name Project A max_storage 30 max release 5 0 hydraulic head 600
150. ame Otay Oren Pde Ver 1 Click on figure for solution 4 4 8 Grids Starting from the code below try to reproduce the graphic on the right taking care of line styles axes pl gca axes set xlim 0 4 axes set ylim 0 3 axes set xticklabels axes set yticklabels l Click on figure for solution 4 4 9 Multi Plots 4 4 Other Types of Plots examples and exercises 95 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Hint You can use several subplots with different partition Starting from the code below try to reproduce the graphic on the right pl subplot 2 2 1 plcsubplou c nc pl subplot 2 ze tu Click on figure for solution 4 4 10 Polar Axis Hint You only need to modify the axes line Starting from the code below try to reproduce the graphic on the right pl axes 0 p ne S N 20 peto mper cce Ok 2a Sion Ion 2 Oe op eda radii 10 nNp random rand N width Mp OL 7 4 no random cand Ni bars pl bar theta radii width width bottom 0 0 tor r Dar i Zip radia Dars bar set facecolor cm jec r 7 10 7 bar set_alpha 0 5 Click on figure for solution 4 4 11 3D Plots RII ERY Hint You need to use contourf Starting from the code below try to reproduce the graphic on the right 4 4 Other Types of Plots examples and exercises 96 Python Scientific lect
151. array int size include lt math h gt Compute the cosine of each element in in array storing the result in X Ou UE 7 void cos doubles double in array double out array int size int i for i 0 i lt size itt o t arrayli cos Iin arr aylil This is wrapped as cos_doubles_func using the following Cython code TE Example OL Wrapping o C LTuncCion Chac tekes C double arrays gs INPuUC Using wee the Numpy declarations from Cython y import both numpy and the Cytbon declarations for numpy import numpy as np cimport numpy as np if you want to use the Numpy C API from Cython not strictly necessary for this example Inoue cxousqueee Hago cine cdefine the signature of our c function cdef extern from cos doubles h void cos doubles double in array double out array int size f create the wrapper code with numpy type annotations def cos doubles func np ndarray double ndim 1 mode c in array not None np ndarray double ndim 1 mode c out array not None cos_coulbles lt doublex gt np PyArray DATA in array lt doublex gt np PyArray DATA out array in array shape 0 And can be compiled using distutils from distutils core import setup Extension import numpy from Cython Distutils import build ext setup cmdelass build exti build ext ext modules Extension cos doubles sources Ik cos doublesspyx cos doubles ce include dirs numpy get include
152. asic array manipulation e scipy scipy ndimage submodule dedicated to image processing n dimensional images See http docs scipy org doc scipy reference tutorial ndimage html gt gt gt from scipy import ndimage Common tasks in image processing Input Output displaying images e Basic manipulations cropping flipping rotating mage filtering denoising sharpening mage segmentation labeling pixels corresponding to different objects Classification Feature extraction Registration More powerful and complete modules OpenCV Python bindings e CellProfiler TK with Python bindings 230 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 many more Chapters contents Opening and writing to image files page 231 Displaying images page 232 Basic manipulations page 234 Statistical information page 234 Geometrical transformations page 235 Image filtering page 236 Blurring smoothing page 236 Sharpening page 236 Denoising page 237 Mathematical morphology page 238 Feature extraction page 240 Edge detection page 240 Segmentation page 241 Measuring objects properties ndimage measurements page 243 12 1 Opening and writing to image files Writing an array to a file from scipy import misc 1 misc lena misc imsave lena png 1 uses the Image module PIL import matplotlib pyplot as plt pltsamshew i
153. at are not efficient with high dimensions 19 5 Putting it all together face recognition An example showcasing face recognition using Principal Component Analysis for dimension reduction and Sup port Vector Machines for classification 19 5 Putting it all together face recognition 344 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 mir Stripped down version of the face recognition example by Olivier Grisel http scikit learn org dev auto examples applications face recognition html original shape of images 50 37 W n import numpy as np import pylab as pl from sklearn import cross val datasets decomposition svm load data lfw people datasets fetch_lfw_people min_faces_per_person 70 resize 0 4 perm np random permutation lfw people target size lfw people data lfw people data perm lfw people target lfw people target perm faces np reshape lfw people data lfw people target shape 0 1 train test iter cross val StratifiedKFold lfw people target k 4 next X train X test faces train Laces cest y_train y_test lfw_people target train lfw_people target test dimension reduction pca decomposition RandomizedPCA n_components 150 whiten True poss Ete xX eran X train ped pcda transform x_ train X test pca pca transform X test wu gesbseesIdom Ton clf svm SVC C 5 gamma 0 001 Caste cd NX SEXE Sep e oJ se EMO EI
154. ator construction gt gt gt class decorator class object def init self arg this method is called in the decorator expression print TIn decorator Invst arg self arg arg def call self function 7 2 Decorators 150 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 this method is called to do the job print in decorator call selrgerdg TN return function gt gt gt deco instance decorator class foo im decorator init 90 gt gt gt deco_ instance det Lume clon tergs kwargs print in Tunecion args kwargs im decorator call X09 ooo Limce von N in euiheeiomy 0 1 Contrary to normal rules PEP 8 decorators written as classes behave more like functions and therefore their name often starts with a lowercase letter In reality it doesn t make much sense to create a new class just to have a decorator which returns the original function Objects are supposed to hold state and such decorators are more useful when the decorator returns a new object gt gt gt class replacing decorator class object def init__ self arg this method is called in the decorator expression print in cecorarcr Jimi arg self arg arg def call self function this method is called to do the job print in decorator call seliacerc self function function return self wrapper def wrapper self xargs xxkwargs print in the wrapper args kwargs ous re
155. ave made sure that the f close is called when the with block is exited Since closing files is such a common operation the support for this is already present in the file class Ithas an___exit___ method which calls close and can be used as a context manager itself gt gt gt with open tmp file Fat as f foniiee More COnpent n The common use for try finally is releasing resources Various different cases are implemented similarly in the __enter__ phase the resource is acquired in the __exit__ phase it is released and the exception if thrown is propagated As with files there s often a natural operation to perform after the object has been used and it is most convenient to have the support built in With each release Python provides support in more places all file like objects file automatically closed fileinput tempfile py gt 3 2 bz2 BZ2File gzip GzipFile tarfile TarFile zipfile ZipFile ftplib nntplib e close connection py gt 3 2 or 3 3 locks multiprocessing RLock lock and unlock multiprocessing Semaphore memoryview automatically release py gt 3 2 and 2 7 decimal localcontext modify precision of computations temporarily e winreg PyHKEY open and close hive key e warnings catch warnings kill warnings temporarily e contextlib closing the same as the example above call close parallel programming concurrent futures ThreadPoolExecuto
156. be plotted 4 5 4 Galleries The matplotlib gallery is also incredibly useful when you search how to render a given graphic Each example comes with its source A smaller gallery is also available here 4 5 5 Mailing lists Finally there is a user mailing list where you can ask for help and a developers mailing list that is more technical 4 6 Quick references Here is a set of tables that show main properties and styles 4 6 1 Line properties Appearance antialiased True or False use antialised Aliased rendering Anti aliased matplotlib color arg linestyle or Is see Line properties page 99 uw LL TEETETETERS ee il ial DIIUIEL p a M MAT C mut uam a Wm ee see Markers page 100 markeredgewidth line width around the marker mew symbol markeredgecolor edge color if a marker is used 0 0 48 8 0 H H m mec markerfacecolor face color if a marker is used mfc size of the marker in points 8 5 oO 0 H D 1 I Jj 46 Quick references 0000000000000 899 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 6 2 Line styles TEE 0 Of SPV An dc x od rnm tco l AL E fF F A T a FETAY 0 70 5 7 9 yY E E c 9 Q A V apE CT x yr zk 24 Oe Os Pie 6 A V4 H 909 9466 rije OAVAbBE x09 209 1 24 906 BE oc oa Iz g Q A VAIPA X9 y zk 08606 Os i m I i o o Q A V 4 PE x9 ry zc
157. bsgsdccbpescbst BONETE y SMOD Iob tdqoWweEst debugging rst Make a directory 2 7 Standard Library 35 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 in 32 Ss mkaie junki In 3312 Junkar ane os lastcwr os curdwre oute Sais True Rename the directory In 36 ossrenamea gunkdmer roodrrt In 37 undecucr t xn oosLbxstcw rios cusrdsx Out 37 False In I138 tftoocir an os listdir cs curdir Out Se i True In 41i os rmdir C foods in fags rfoodsr 3B oOSs lrzstoutbtosscu cd Out 47 False Delete a file In 44 fp open junk txt w In 45 fp close In 45 Jjonk cxt din os Ursbtdir osScurdmrr5 Out 46 True In 47 os remove junk txt In p4g T Junk t dn os isstdir os cubdtr Out 48 False os path path manipulations os path provides common operations on pathnames In 70 fp open junk txt w in 71 tpoclose t In 72 a os path abspath junk txt In 73 a oeo e 7 7Users7 cours Sro scipy 2009 scipy 2000 tutorial source Junk CRE In 74 2 oc path split a Out l 7413 Users courno sre scipy20090 scipy 2009 tutorral sourtcs sunk txt In 78 os path dirname a Durt T79 v Users7 churns sre scipy2009 7 scipy2 000 Tulorial source In 79 os path basename a ont aoe FSi an sc In 80 os path splitext os path basename a Ome eke ik Piet
158. c view np chararray gt gt gt x pu cus c FT DPED poo Seo Chaverray I e bbb Roo i dtype S5 gt gt gt x upper cherscrsgsd a NN BBR 7 Weer dtype S5 Note view hasa second meaning it can make an ndarray an instance of a specialized ndarray subclass 8 4 2 masked array missing data Masked arrays are arrays that may have missing or invalid entries For example suppose we have an array where the fourth entry 1s invalid x Mpwoerray dos 25 e 995 5 One way to describe this is to create a masked array gt gt gt mx np ma masked_array x mask 0 0 O 1 0 gt gt gt mx masked array data 1 23 5 mask False False False True False fill value 999999 Masked mean ignores masked data mx mean 2S gt gt gt np mean mx PE Es The masked array returns a view to the original array mx 1 9 gt gt gt x arcay i 1 9e 3 99 Ou The mask You can modify the mask by assigning mx 1 np ma masked gt gt gt mx massed array dsta ME 2 5 mask False True False True False fill value 999999 The mask is cleared on assignment 8 4 Array siblings chararray maskedarray matrix 185 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt mx 1 9 gt gt gt mx Masked array data 1 lt 9 3 gt 5 mask False False False True
159. ccepts dense matrix array sparse matrix shape tuple create empty matrix flexible slicing changing sparsity structure is efficient slow arithmetics slow column slicing due to being row based use when sparsity pattern is not known apriori or changes example reading a sparse matrix from a text file Examples create an empty LIL matrix gt gt gt mtx sparse lil matrix 4 5 prepare random data gt gt gt from numpy random import rand gt gt gt data np round rand 2 9 gt gt gt data arcar Iii Ils ler eds lie dicis Cras SHIP assign the data using fancy indexing gt gt gt mise Je Wee us data gt gt gt mtx docs Sparse matrix or type lt uype mumnbyerlbogued with 5 stored elements in Linked List format gt gt gt gt print mtx CO Sor L0 0 2 07 ly T PRE 0 20 O 11 2 Storage Schemes 216 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 ie 3 O gt gt gt mtx todense maciix I Ws TM SEM ie EE ee ee deer DES dL SUERTE s Ce Beer er Assur MRON Cees har Ose sse gt gt gt mtx toarray amr a OE aa alte Ale a Oey O y Onr r only Moe Du Des quus Que L0 0 oF 0 O21 ee iad A more slicing and indexing Boo Mex Oparo oeli matrix Ol e corr GE sy Oe al Spa dike Ger du CODE gt gt gt MEX Lodence 4 Meter isc iO shy arcs Loy Ub s Oy ele 2 uus ileal d gt gt g
160. ce as hard as writing a program in the first place So if you re as clever as you can be when you write it how will you ever debug it 192 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 We all write buggy code Accept it Deal with it Write your code with testing and debugging in mind Keep It Simple Stupid KISS What is the simplest thing that could possibly work Don t Repeat Yourself DRY Every piece of knowledge must have a single unambiguous authoritative representation within a system Constants algorithms etc e Try to limit interdependencies of your code Loose Coupling Give your variables functions and modules meaningful names not mathematics names 9 1 2 pyflakes fast static analysis They are several static analysis tools in Python to name a few pylint pychecker pyflakes peps e flake8 Here we focus on pyflakes which is the simplest tool Fast simple Detects syntax errors missing imports typos on names Another good recommendation is the 1ake8 tool which is a combination of pyflakes and pep8 Thus in addition to the types of errors that pyflakes catches flake8 detects violations of the recommendation in PEPS style guide Integrating pyflakes or flake8 in your editor or IDE is highly recommended it does yield productivity gains Running pyflakes on the current edited file You can bind a key to run pyflakes in the current
161. cely with C Disadvantages Autogenerates enormous files Hard to debug if something goes wrong e Steep learning curve 14 4 1 Example Let s imagine that our cos function lives in a cos_module which has been written in c and consists of the source file cos module c Fincinde math double cos func double arg return cos arg and the header file cos module h double cos func double arg And our goal is to expose the cos func to Python To achieve this with SWIG we must write an interface file which contains the instructions for SWIG a Bxamole On M ODIO cS function from Making br Using WIG eA Smodule cos module E j the resultung C file should be built as a python extension 4 7 define SWIG_FILE_WITH_INIT Includes the header in the wrapper code x fime luce cos module Ny Parse the header file to generate wrappers x ginclude oos module bh As you can see not too much code is needed here For this simple example it is enough to simply include the header file in the interface file to expose the function to Python However SWIG does allow for more fine grained inclusion exclusion of functions found in header files check the documentation for details Generating the compiled wrappers is a two stage process 1 Run the swig executable on the interface file to generate the files cos module wrap c which is the source file for the autogenerated Python C extension and cos module py which
162. cientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt optimize leastsq f x0 array 0 Ope ae TES TESTER P Q 22222222 y 30599357 DI usb ES 0 66666667 BENT T Tia hs 0 88888889 l I 2 This took 67 function evaluations check it with full_output 1 What if we compute the norm ourselves and use a good generic optimizer BFGS gt gt gt def g x return np sum f x 2 gt gt gt optrimizesrtmaneorgeq g 30 Optimization terminated successfully Current function value 0 000000 Tteratconss Wm Function evaluations 144 Gradient evaluations 12 array 38 99827 76 09 To TP 265e 00s Zuge ose Ol 52 055 5191426015 4 44449794e 01 bs 555604299601 6 66672149e 01 Duo 8 88882036e 01 1200001026e400 BFGS needs more function calls and gives a less precise result Note leastsq is interesting compared to BFGS only if the dimensionality of the output vector is large and larger than the number of parameters to optimize Warning If the function is linear this is a linear algebra problem and should be solved with Scaxpv linalcg lstsqti 13 4 2 Curve fitting 1 0 0 5 0 0 0 5 135 0 5 1 0 1 5 2 0 2 5 3 0 Least square problems occur often when fitting a non linear to data While it is possible to construct our optimization problem ourselves scipy provides a helper function for this purpose scipy optimize curve fit gt gt gt def f t omega phi return np
163. city of all coins 16 6 Data visualization and interaction Meaningful visualizations are useful when testing a given processing pipeline Some image processing operations gt gt gt coins data coins gt gt gt mask coins gt filter threshold otsu coins gt gt gt clean_border segmentation clear_border mask Visualize binary result gt gt gt plt figure gt gt gt plt imshow clean border cmap Gray Visualize contour 16 5 Measuring regions properties 301 gt gt gt gt gt gt gt gt gt Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 perque pit vumshowtcocormo mdp gray ple contour elean border OSN Use skimage dedicated utility function gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt x m gt 0 8 coins edges segmentation mark boundaries coins clean border f In 0 7 segmentation Visualize boundaries color gray2rgb coins clean border plt imshow coins edges D oo Tag g D T LEN 5 E m The ex perimental scikit image viewer skimage viewer matplotlib based canvas for displaying images experimental Qt based GUI toolkit gt gt gt gt gt gt gt gt gt from skimage import viewer new_viewer viewer ImageViewer coins new_viewer show Useful for displaying pixel values For more interaction plugins can be added to the viewer
164. corator def decorator function fo cn Chis inner function arg is available too print Going decoration arg def _wrapper xargs xkwargs print inside wrapper args kwargs return function xargs xxkwargs return wrapper return decorator gt gt gt replacing_decorator_with_args abc def function args x kwargs print inside function args kwargs Oe return 14 defining the decorator doing decoration abc eo CUNCTA LL 12 nswde wrapper IIl 12 1 imelode CUnCtri on 1 EZ 43 14 The _wrapper function is defined to accept all positional and keyword arguments In general we cannot know what arguments the decorated function is supposed to accept so the wrapper function just passes everything to the wrapped function One unfortunate consequence is that the apparent argument list is misleading Compared to decorators defined as functions complex decorators defined as classes are simpler When an object is created the init method is only allowed to return None and the type of the created object cannot be changed This means that when a decorator is defined as a class it doesn t make much sense to use the argument less form the final decorated object would just be an instance of the decorating class returned by the constructor call which is not very useful Therefore it s enough to discuss class based decorators where arguments are given in the decorator expression and the decorator init method is used for decor
165. cos omega t phi pon o e np binspace 0y 3 950 gt gt gt y E x 1 5 1 2lenp random normal size 50 gt gt gt optimizelcurvecrit f x y array Ol Ivolss45 7 Wx9Z266554 7 array i 200037994 0 000567 96 I Cs000S6726 00002397 211 13 4 Special case non linear least squares 260 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Do the same with omega 3 What is the difficulty 13 5 Optimization with constraints 13 5 1 Box bounds Box bounds correspond to limiting each of the individual parameters of the optimization Note that some problems that are not originally written as box bounds can be rewritten as such be a change of variables 0 5 e scipy optimize fminbound for 1D optimization e scipy optimize fmin_l_bfgs_b aquasi Newton page 255 method with bound constraints gt gt gt def f x return nopwsqre x 0 3 9 2 4 XxX Ll 2 2 poc opucrImize cmurn tcbmegscbCob npeacrayetb0 y aoproxsgrad bounds el S Led F beo Beor a T T e dd oce DII CONVERGENCE TN ORM_OF PROJFP 13 5 2 General constraints Equality and inequality constraints specified as functions f x 0 and g x lt 0 e scipy optimize fmin_slsqp Sequential least square programming equality and inequality con O Ke straints gt gt gt def f x return ne sgr e CO E 4 aT gt gt gt def constraint x return np atleast_1
166. ct In the init of this object we populate the 3D scene with a curve Finally the configure_traits method creates the dialog and starts the event loop See also There are a few things to be aware of when doing dialogs with Mayavi Please read the Mayavi documentation 18 5 2 Making it interactive We can combine the Traits events handler page 316 with the mlab_source to modify the visualization with the dialog We will enable the user to vary the n turns parameter in the definition of the curve For this we need e to define an n turns attribute on our visualization object so that it can appear in the dialog We use a Range type e to wire modification of this attribute to a recomputation of the curve For this we use the on traits change decorator 4 n Edit properties 3 xj v v z Z i 48 UG N turns 0 emm 30 11 from traits api import Range on_trait_change class Visualization HasTraits n_turns Range 0 30 11 scene Instance MlabSceneModel def init__ self HasTraits imac self x yr 2 Curve gelr n CUr rng self plot self scene mlab plot3d x y Z on_trait_change n_turns def update plot self 18 5 Making interactive dialogs 335 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 X Vp zZz Curve self n_turns self plot mlab_source set X5x Y Y Z Z view View Item scene height 300 show_label False editor
167. cting magnetic fields page 331 Different views on data sources and modules page 331 Different sources scatters and fields page 332 Transforming data filters page 333 mlab pipeline the scripting layer page 333 Animating the data page 333 Making interactive dialogs page 334 Asimple dialog page 334 Making it interactive page 335 Putting it together page 336 x x 18 1 Mlab the scripting interface The mayavi mlab module provides simple plotting functions to apply to numpy arrays similar to matplotlib or matlab s plotting interface Try using them in IPython by starting IPython with the switch gui wx 324 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 18 1 1 3D plotting functions Points points3 oe c E q Las ee Hint Points in 3D represented with markers or glyphs and optionaly different sizes plot3ad Hint A line connecting points in 3D with optional thickness and varying color mlab clf Clear the figure t npalinspace 0 220 200 mlan ploto dnp sein ed PC oS a Olara Piso Elevation surface surf 18 1 Mlab the scripting interface 325 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Hint A surface given by its elevation coded as a 2D array mlab cif lt p y np mgrid 10 lu su 10 10 10071 p npssqrtocwee2 t y 2 z np Sin r r mlab surf z war
168. cture of the magnetic field shown previously Note that one of the difficulties is providing the data in the right form number of arrays shape to the functions This is often the case with real life data See also Sources are described in details in the Mayavi manual 18 3 Slicing and dicing data sources modules and filters 332 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Transforming data filters If you create a vector field you may want to visualize the iso contours of its magnitude But the isosurface module can only be applied to scalar data and not vector data We can use a filter Ext ractVectorNorm to add this scalar value to the vector field Filters apply a transformation to data and can be added between sources and modules Excercice Using the GUI add the ExtractVectorNorm filter to display 1so contours of the field magnitude mlab pipeline the scripting layer The mlab scripting layer builds pipelines for you You can reproduce these pipelines programmatically with the mlab pipeline interface each step has a corresponding mlab pipeline function simply convert the name of the step to lower case underscore separated ExtractVectorNorm gives extract vector norm This function takes as an argument the node that it applies to as well as optional parameters and returns the new node For example iso contours of the magnitude are coded as mlab pipeline iso surface mlab pipe
169. d oom E som tq in place gt gt gt r black blue gqreen rod white Methods and Object Oriented Programming The notation r method r append 3 L pop is our first example of object oriented programming OOP Being a list the object r owns the method function that is called using the notation No further knowledge of OOP than understanding the notation is necessary for going through this tutorial Discovering methods Reminder in Ipython tab completion press tab In 28 r rIAB add s ladda pic lease a imul Setattr Setitem s Contains s lalt m Setslice s delgttr Bl added delitem__ le Sizeof OR 09a NN Subclasshook append s COUNT MGelslice len lie pet mul ec o Format ne extend ge new index OS be POP remove getattribute reduce getitem reduce ex getslice repr ous reversed reverse ies ig ig ig T ig Te las K JE ig E IE IE ig Ho M mE e Pp tesa Nese miim clase ADP R hash s ema OnE 2 2 Basic types 15 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Strings Different string syntaxes simple double or triple quotes Hello how are you ses Hil war s up nc edi tripling the quotes allows the how are you the string to span more than one line s mr niat sS Hp in pL BE Ove S up
170. d 1 5 np sum np abs x 13 5 Optimization with constraints 261 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 poc OPLINi z e fmin slgsgp i moyarray I0 0l teqcons conctraimmt 1 Optimization terminated successfully Exit mode OQ Current function value 2 474873 73504 Iterations 5 BUNCE Uon evaluations 20 Gradient evaluations 5 array 1 25004696 0 24995304 e scipy optimize fmin_cobyla Constraints optimization by linear approximation inequality constraints only gt gt gt Op imize fmin cob kathy Mocarray boe Oly som Seco acm Normal return from subroutine COBYEA NFVALS 36 F 2 474874E 00 MAXCV 0 000000E 00 AX e 500 5 T0 Za 499 0590gB8 01 acta OP eu 61 Warning The above problem is known as the Lasso problem in statistics and there exists very efficient solvers for it for instance in scikit learn In general do not use generic solvers when specific ones exist Lagrange multipliers If you are ready to do a bit of math many constrained optimization problems can be converted to non constrained optimization problems using a mathematical trick known as Lagrange multipliers 13 5 Optimization with constraints 262 CHAPTER 14 Interfacing with C author Valentin Haenel This chapter contains an introduction to the many different routes for making your native code primarliy C C available from Python a process commonly referred to wrapping The goal of
171. d chooses the parameters to maximize the cross validation score This object takes an estimator during the construction and exposes an estimator API gt gt gt from sklearn import svm grid_search ooo gammas no lodspace 6 1 10 gt gt gt SVC svm ovct gt gt gt clf grid search GridSearchCV estimator svc param grid dict gamma gammas n jobs 1 roe Clr re ote circu OUI Is digite rere er redi e ION P GridSearchCVv cv None estimator SVC C 1 0 gt gt gt clf best_score Oe SS SS OS S dd gt gt gt clf best estimator gamma 0 000 5994954250351 994099 By default the GridSearchCV uses a 3 fold cross validation However if it detects that a classifier is passed rather than a regressor it uses a stratified 3 fold Cross validated estimators Cross validation to set a parameter can be done more efficiently on an algorithm by algorithm basis This is why for certain estimators the scikit learn exposes CV estimators that set their parameter automatically by cross validation gt gt gt from sklearn import linear_model datasets gt gt gt lasso linear model LassoCV gt gt gt diabetes datasets load diabetes gt gt gt X diabetes diabetes data gt gt gt y_diabetes diabetes target gt gt gt lasso fit X diabetes y diabetes LassoCV alphas array 2 14804 ZA DIDA El pe Sec 0 0023 UD copy X True cv None eps 0 001 fit intercept True max iter 1000 n alphas 100 n
172. d cos doubles double in array double out array int size int i for i 0 i lt size itt Qui array a cosin arraylil This is wrapped as cos_doubles_func using the following SWIG interface file Example of wrapping a C function that takes a C double array as input using umpy tyvpemaps for SWIG Smodule cos doubles ON Je che reculting file should be built asa Python extension 4 7 define SWIG_FILE_WITH_INIT Includes the header in the wrapper code x TFimelucg cocmeoulb besa NY oe y include the numpy typemaps sino lude mumpy o a need this for correct module initialization Sinit gf import array oe typemaps for the two arrays the second will be modified in place x edpplv doubles IN ARRAI ng DIMI double o ii array umb oie in capply doubles INPILACE ARRAY ine DIMI double out array Int Size out Wrapper for cos doubles that massages the types x Sinline takes as input two numpy arrays vVoud CoS double rune double In orra int ora n GC ouble out ora ane Size out ls ei sche omit nm co uncon NOU vut cla n S emily Twine Sidi e o a os te Qosccoubibe s 10e array OUt array Suse oe C To use the Numpy typemaps we need include the numpy i file e Observe the call to import array which we encountered already in the Numpy C API example 14 4 SWIG 274 Python Scientific lecture notes Release 2013 2 beta
173. d line second column gt gt gt a akrayil 0 0 Ol 0 p Uy L Or Oy SPI gt gt gt all abray qb 24 010 Note that n 2D the first dimension corresponds to rows the second to columns Let us repeat together the first dimension corresponds to rows the second to columns e for multidimensional a a O is interpreted by taking all elements in the unspecified dimensions Slicing Arrays like other Python sequences can also be sliced gt gt gt a np arange 10 gt gt gt a array dur gy Oe teen 5 dO Ya onec Sli gt gt gt a 2 9 3 startcend step array Bi m Note that the last index is not included gt gt gt a 4 aura bg yx 31 All three slice components are not required by default start is 0 end is the last and step is 1 gt gt gt es d i zl gt gt gt a 2 icem QU ZG hes Oy S gt gt gt a 3 arro 3 4 5 E So Ol A small illustrated summary of Numpy indexing and slicing 3 1 The Numpy array object 50 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt a 0 3 5 array 3 4 gt gt gt a 4 4 array 44 45 54 55 gt gt gt al 2 array 2 12 22 32 42 52 gt gt gt a 2 2 2 array 20 22 24 40 42 441 You can also combine assignment and slicing gt gt gt a np arange 10 gt gt gt a 5 10 gt gt gt a arcay Qu du 2 2 4 10 10 10 10 101
174. define a generator which just prints what is passed in through send and throw gt gt gt import itertools gt gt gt def g print S HEL for i an tertools counc s print yieloing 1 1 try ans yield i except GeneratorExit print ciosiug e raise except Exception as e print ysold raised r e else print yield returned s ans gt gt gt it g gt gt gt next it otare cevpeldzng 0 0 gt gt gt it send 11 vyield returned ll yielding l 1 gt gt gt it throw IndexError ywwveld raised IndexError ce go 2 2 so uec tossed Clos ge 7 1 lterators generator expressions and generators 147 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 next or next In Python 2 x the iterator method to retrieve the next value is called next It is invoked implicitly through the global function next which means that it should be called next Just like the global func tion iter calls iter This inconsistency is corrected in Python 3 x where it next becomes it next For other generator methods send and throw the situation is more complicated because they are not called implicitly by the interpreter Nevertheless there s a proposed syntax extension to allow continue to take an argument which will be passed to send of the loop s iterator If this exten sion is accepted it s likely that gen
175. der constraints Here lt x lt 1 lt z2 lt 1 13 2 A review of the different optimizers 13 2 1 Getting started 1D optimization Use scipy optimize brent to minimize ID functions It combines a bracketing strategy with a parabolic approximation 13 2 A review of the different optimizers 250 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Brent s method on a quadratic function it converges in 3 iterations as the quadratic approximation is then exact Brent s method on a non convex function note that the fact that the optimizer avoided the local minimum is a matter of luck gt gt gt from scipy import optimize gt gt gt def f x return np exp x 7 w 2 gt gt gt x min optimize brent f It actually converges in 9 iterations gt gt gt x min 0 699999999 T bou s SO Rama 2 1600555110 Note Brents method can be used for optimization constraint to an intervale using Scipy optimize fminbound Note Inscipy 0 11 scipy optimize minimize scalar gives a generic interface to 1D scalar mini mization 13 2 2 Gradient based methods Some intuitions about gradient descent Here we focus on intuitions not code Code will follow Gradient descent basically consists consists in taking small steps in the direction of the gradient Table 13 1 Fixed step gradient descent A well conditionned quadratic function
176. dexing can be done with an array of integers where the same index is repeated several time So M se pe Soe OES ie 2 uw 4 IJ EOS Pyrenon TISE array 205 30 20 40 201 New values can be assigned with this kind of indexing SU OOT dU Dope 90 r LOU Tip When a new array is created by indexing with an array of integers the new array has the same shape than the array of integers a Np arange 10 soc idz Movarray 3 gt gt gt idx shape 472 gt gt gt al idx arcay lo The image below illustrates various fancy indexing applications gt gt gt a 0 1 2 3 4 1 2 3 4 5 array 1 12 23 34 45 gt gt gt al3 0 2 5 array 30 32 35 40 42 45 50 52 55 gt gt gt mask array 1 0 1 0 0 1 dtype bool gt gt gt a mask 2 array 2 22 52 3 1 The Numpy array object 54 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Fancy indexing Again verify the fancy indexing shown in the diagram above Use fancy indexing on the left and array creation on the right to assign values from a smaller array to a larger array 3 2 Numerical operations on arrays Section contents Elementwise operations page 55 Basic reductions page 57 Broadcasting page 61 Array shape manipulation page 64 Sorting data page 66 Summary page 67 3 2 1 Elementwise operations Basic operations With scalars gt gt gt
177. dified as per the signature e otherwise the g ufunc operates elementwise e matrix multiplication this way could be useful for operating on many small matrices at once Generalized ufunc loop Matrix multiplication m n n p gt m p 8 2 Universal functions 181 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 void gufunc loop void xargs int dimensions int xsteps void xdata char input 1 char args 0 these are as previously char input 2 char args 1 char output char args 2 int input l stride m steps 3 strides for the core dimensions 7 we ere cadded atter the noa core w int input 1 stride n steps 4 T o e int input_2_strides_n steps 5 6 T 8 int input_2_strides_p steps int output strides n steps int output strides p steps int m dimension 1 core dimensions are added after int n dimension 2 the main dimension order as in int p dimension l 74 signature 47 int i fort 1 0 uc damenscvenstOols bg marcm l ror s tua deco med ross inputs npe Output strides for each array input 1 steps 0 iM input 2 steps output steps 2 8 3 Interoperability features 8 3 1 Sharing multidimensional typed data Suppose you 1 Write a library than handles multidimensional binary data 2 Want to make it easy to manipulate the data wi
178. dimensions get added to the end Note There are existing modules such as wavfile audiolab etc for loading sound data Casting and re interpretation views casting on assignment on array construction on arithmetic e etc e and manually ast ype dtype data re interpretation e manually view dtype Casting Casting in arithmetic in nutshell only type not value of operands matters largest safe type able to represent both is picked scalars can lose to arrays in some situations Casting in general copies data 8 1 Life of ndarray 164 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt x np array 1 2 3 4 dtype np float gt gt gt X array la Diss Sag ZI gt gt gt y x astype np int89 gt gt gt y array Il 2 23r 4l uliypeermte Boo yar d array 27 3 Gp ol dtype inte Lors e vM TUS array ll 2 344 dtiypesrinto9 gt gt gt y 25620 eiciayiG ZEN A5 doce oO ps v Npwartray 256 deype np ines2Z gua esu SO NI tc Sms 29 Casting on setitem dtype of the array is not changed on item assignment 22 gt yl l NC EIS gt gt gt y array l2 3 4 5 dtype inte Note Exact rules see documentation http docs scipy org doc numpy reference ufuncs html casting rules Re interpretation viewing Data block in memory 4 bytes 4 of uint8 OR 4 of int8 OR 2 of intl6 OR 1
179. do cT and generate a new array containing its 2nd and 4th rows 2 Divide each column of the array gt gt gt a np arange 25 reshape 5 5 elementwise with the array b np array 1 5 10 15 20 Hint np newaxis 3 Harder one Generate a 10 x 3 array of random numbers in range 0 1 For each row pick the number closest to 0 5 e Use abs and argsort to find the column j closest for each row e Use fancy indexing to extract the numbers Hint a i j the array i must contain the row numbers corresponding to stuff in j 3 5 2 Picture manipulation Framing Lena Lets do some manipulations on numpy arrays by starting with the famous image of Lena http www cs cmu edu chuck lennapg scipy provides a 2D array of this image with the scipy lena function gt gt gt from scipy import misc gt gt gt lena misc lena Note In older versions of scipy you will find lena under scipy lena Here are a few images we will be able to obtain with our manipulations use different colormaps crop the image change some parts of the image Let s use the imshow function of pylab to display the image 3 5 Some exercises 75 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In 3 import pylab as plt In 4 lena misc lena In 5 plt imshow lena Lena is then displayed in false colors A colormap must be specified for her
180. does not have a fixed size See also wavreader py gt gt gt wav header dtype format dt yP rca gt gt gt wav_header_dtype fields lt ductproxy Ob jJecr SE 4452 gt gt gt wav header dtype fields format dey pet d Eo The first element is the sub dtype in the structured data corresponding to the name format The second one is its offset in bytes from the beginning of the item 8 1 Life of ndarray 163 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise Mini exercise make a sparse dtype by using offsets and only some of the fields gt gt gt wav header dtype np dtype dict names format sample rate data id OTftfsSoLts otset l1 ottseoLt 2 otftsot 3l x Counted from Start of Structure vn b formats list of dtypes for each of the fields and use that to read the sample rate and data id as sub array gt gt gt f open data test wav r gt gt gt wav header np fromfile f dtype wav header dtype count 1 gt gt La C Loge gt gt gt print wav_header CS AO WAVE nine ma lous i OOO SA2000 ar kee lee yee I tet a gt gt gt wav header sample rate array 116000 dtype urnto2 Let s try accessing the sub array gt gt gt wav header data id artar MEL ars Ep un dtype S1 gt gt gt wav header shape 1 gt gt gt wav header data id shape co LL When accessing sub arrays the
181. dy If you were to wrap a in house library you would have to compile it first which may or may not require some additional effort We may now use this as before In 1 import cos_module In 2 cos module Type module String Form module cos module from Ccosumocdule py gt File home esc git working scipy lecture notes advanced interfacing with c ctypes cos modu DOCSEELNG mouesocstctrTgmg In I3 drr cos module Out ls s t sum damos y m coc P2 name t peckadgee COS S T TIC etvpDes 4 find library adm in 4 cos_module cos_func 1 0 Cumella 0 5203023059591 399 In D5 5 cos moduler cos tune 0 0 Du se xou In I6 ocos module cos kine O 1421507653559 Chee Poa i 20 As with the previous example this code is somewhat robust although the error message is not quite as helpful since it does not tell us what the type should be 14 3 Ctypes 269 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 ArgumentError Traceback most recent call last lt ipython input 7 llbee483665d gt in lt module gt gt cos moclule cos runell Too home esc git working scipy lecture notes advanced interfacing with c ctypes cos module py in cos 12 der Cos fune arg 13 1u Wrapper ror cos Tron marcha 7 14 peturm libm cos arg ArgumentError argument 1 lt type exceptions TypeError gt wrong type 14 3
182. e Chapters contents File input output scipy io page 103 Special functions scipy special page 103 Linear algebra operations scipy linalg page 104 Fast Fourier transforms scipy fftpack page 105 Optimization and fit scipy optimize page 109 Statistics and random numbers scipy stats page 113 Interpolation scipy interpolate page 115 Numerical integration scipy integrate page 116 Signal processing scipy signal page 118 Image processing scipy ndimage page 119 Summary exercises on scientific computing page 124 Warning This tutorial is far from an introduction to numerical computing As enumerating the different submodules and functions in scipy would be very boring we concentrate instead on a few examples to give a general idea of how to use scipy for scientific computing scipy is composed of task specific sub modules 102 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 They all depend on numpy but are mostly independent of each other The standard way of importing Numpy and these Scipy modules is gt gt gt import numpy as np gt gt gt from scipy import stats same for other sub modules The main scipy namespace mostly contains functions that are really numpy functions try scipy cos is np cos Those are exposed for historical reasons only there s usually no reason to use import scipy in your code 5 1 File input output scipy io Loading and savi
183. e Pasting code enter alone on the line to stop or use Ctrl D eum S tamer x 10 10000000 Loops dest Of 3 95 9 ns per Loop In 6 cpaste Pasting code enter alone on the line to stop or use Ctrl D gt gt gt Cimeit x 10 10000000 loops best of 3 86 ns per loop e debug allows you to enter post mortem debugging That is to say if the code you try to execute raises an exception using debug will enter the debugger at the point where the exception was thrown In 7 x 10 Pile sspyechon onpue o l212p4 4210505 29 5 Lane ad x 10 Sx Iba porDc Invalid Sb In 8 debug gt home esc anaconda lib python2 7 site packages IPython core compilerop py 87 ast_parse 86 and are passed to the built in compile function mm gt 87 return compile source filename symbol self flags PyCF ONLY AST 88 ipdp locals source u x 10 n symbol exec self IPython core compilerop CachingCompiler instance at O0x2ad8ef0 filename spvehon inpuu o6 S2rfdd221bD5 29 1 3 The interactive workflow IPython and a text editor 8 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 IPython help The built in Python cheat sheet is accessible via the quickref magic function A list of all available magic functions is shown when typing magic Furthermore Python ships with various aliases which emulate common UNIX command line tools such a
184. e 2013 2 beta euroscipy 2013 S python examples lobpcg_sakurai py Results by LOBPCG for n 2500 ouem oes 90 roro e 0 306250028 Ose a uc Exact eigenvalues PORDE OCOS QUO 9 eO P 0 06250044 Elapsed time 7 01 Eigenvalue distribution 1012 10H 191 10 10 10 10 lt 10 10 10 10 10 10 10 8606 10 10 10 10 10 10 Number 11 4 Other Interesting Packages PyYAMG algebraic multigrid solvers http code google com p pyamg Pysparse own sparse matrix classes matrix and eigenvalue problem solvers http pysparse sourceforge net 11 4 Other Interesting Packages 229 CHAPTER 12 Image manipulation and processing using Numpy and Scipy authors Emmanuelle Gouillart Ga l Varoquaux This chapter addresses basic image manipulation and processing using the core scientific modules NumPy and SciPy Some of the operations covered by this tutorial may be useful for other kinds of multidimensional array processing than image processing In particular the submodule scipy ndimage provides functions operating on n dimensional NumPy arrays See also For more advanced image processing and image specific routines see the tutorial Scikit image image processing page 291 dedicated to the sk image module Image 2 D numerical array or 3 D CT MRI 2D time 4 D Here image Numpy array np array Tools used in this tutorial numpy b
185. e Decomposition is what takes most of the time Indeed the computational cost of this algorithm is roughly n in the size of the input matrix However in both of these example we are not using all the output of the SVD but only the first few rows of its first return argument If we use the svd implementation of scipy we can ask for an incomplete version of the SVD Note that implementations of linear algebra in scipy are richer then those in numpy and should be preferred 10 3 Making code go faster 207 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In 13 timeit np linalg svd data Lt loops best of 3 14 5 3 per loop In 4 from scipy import linalg In 5 seimere linalg svd data T Loops best of S3 14 2 s per loop In 6 Stimeit linalg svd data full_matrices False l loops best of 3 295 ms per loop In 7 timeit np linalg svd data full matrices False i loops best of 3 295 ms per loop We can then use this insight to optimize the previous code In 1 import demo In 2 timeit demo demo fastica demo np demo prof pdf demo py demo pyc demo linalg demo prof demo prof png demo py lprof demo test in I2 5 Scumert demo crest iCa pyi 65 RuntimeWarning invalid value encountered in sqrt W u s xci a gelo mire set sS Ue N 4 WS MWe Wel Sees P 3 Ww i loops best or 3 17 5 5 per loop In 3 import demo opt In 4 timeit demo opt test i loops best of 322 208 ms
186. e ees dS vu S 49s A SMS bb teehee RR xo deuia E 93x REE REE Ge oe Eee Exo yw x 4 ay CO eR ee RU UR POP ERASE RUPEE EUM REM TE EGR WG SONNY ove hom mox EEE o9 03 x9 Rex X08 235 0 xe TERE EG EEE EERE ow OE S 137 141 143 144 148 156 159 160 173 182 185 188 188 192 192 195 195 200 203 203 204 207 208 211 211 213 224 229 230 251 292 234 236 240 243 247 248 250 227 259 261 263 263 264 268 271 276 279 14 7 14 8 Further Reading and References O co x EMR EE RR ex we HO YS III Packages and applications 15 Sympy Symbolic Mathematics in Python 15 1 15 2 15 3 15 4 15 5 First Steps with SymPy aaa aaa Algebraic manipulations CAICUING 4 3 vox wow E Ros x o6 Y X ae RE X xk Ee ox 3 Equation solving 4 2 2 46444 664 64 4 bee hee linear AISOD A uo nemus oad ee we ho we wok RSS S 16 Scikit image image processing 16 1 16 2 16 3 16 4 16 5 16 6 16 7 Introduction and concepts ud ok kx Input output data types and colorspaces Image preprocessing enhancement Image segmentation 1 6564 6 we eee eee x X OS Measuring regions properties Data visualization and interaction Feature extraction for computer vision 17 Traits building interactive dialogs 17 1 17 2 Lo 17 4 Introducti uoo wok o4 36 o9 o3 XR XE A HR da neon m Wha
187. e mathematical morphology to clean the different phases 7 Attribute labels to all bubbles and sand grains and remove from the sand mask grains that are smaller than 10 pixels To do so use ndimage sumor np bincount to compute the grain sizes 8 Compute the mean size of bubbles Proposed solution gt gt gt import numpy as np gt gt gt import pylab as pl gt gt gt from scipy import ndimage 5 11 Summary exercises on scientific computing 132 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 5 11 4 Example of solution for the image processing exercise unmolten grains in glass Det Spot Mag MV 15 05 2009 1280 C 1 Open the image file MV HFV 012 jpg and display it Browse through the keyword arguments in the docstring of imshow to display the image with the right orientation origin in the bottom left corner and not the upper left corner as for standard arrays gt gt gt dat plor mreead data MV HFV 012 Jpg 2 Crop the image to remove the lower panel with measure information gt gt gt dat dat 60 3 Slightly filter the image with a median filter in order to refine its histogram Check how the histogram changes gt gt gt filtdat ndimage median filter dat size 7 7 gt gt gt hi dat np histogram dat bins np arange 256 gt gt gt hi_filtdat np h histogram filtdat bins np arange 256 5 11 Summary exercises on scientific computi
188. e oe TA aa Ae In 6 id a Out Gls 15964106 In 7 a5 ly 2 39 X Modifies object in place In 8 a Cure boe rubr 2 a In 9 id a Out Sls 13956416706 7 Same es an QuULIOJ yours will irrer the key concept here is mutable vs immutable mutable objects can be changed in place immutable objects cannot be modified once created See also A very good and detailed explanation of the above issues can be found in David M Beazley s article Types and Objects in Python 2 2 Basic types 18 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 2 3 Control Flow Controls the order in which the code is executed 2 3 1 if elif else gt gt gt IDE Je wu print Ooovrousi Obvious Blocks are delimited by indentation Tip Type the following lines in your Python interpreter and be careful to respect the indentation depth The python shell automatically increases the indentation depth after a column sign to decrease the indentation depth go four spaces to the left with the Backspace key Press the Enter key twice to leave the logical block In 1 a 10 In 2 1 a print 1 gt elif a print 2 else print A lot A lot Indentation is compulsory in scripts as well As an exercise re type the previous lines with the same indentation in a script condition py and execute the script with run condition py in Ipython 2 3 2 for range Iterating with a
189. e time offset for min and max temperatures the same within the fit accuracy 5 5 Optimization and fit scipy optimize 112 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise 2 D minimization Six hump Camelback function The six hump camelback function 4 a f x y 4 212 ze zy Ay Ay has multiple global and local minima Find the global minima of this function Hints e Variables can be restricted to 2 lt x lt 2and 1 lt y lt 1 e Use numpy meshgrid and pylab imshow to find visually the regions e Use scipy optimize fmin_bfgs or another multi dimensional minimizer How many global minima are there and what is the function value at those points What happens for an initial guess of x y 0 0 See the summary exercise on Non linear least squares curve fitting application to point extraction in topograph ical lidar data page 128 for another more advanced example 5 6 Statistics and random numbers scipy stats The module scipy stats contains statistical tools and probabilistic descriptions of random processes Random number generators for various random process can be found in numpy random 5 6 1 Histogram and probability density function Given observations of a random process their histogram is an estimator of the random process s PDF probability density function 5 6 Statistics and random numbers scipy stats 113 Python Scientific lecture note
190. eError ascii codec can t decode byte Oxc3 in position 2 ordinal not in range Exceptions to pass messages between parts of the code In 17 def achilles arrow x qt albos lt 1 bees raise StopIteration 1 1 x 2 return x In 18 In 19 while True Ery 2 8 Exception handling in Python 41 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 AN X achilles arrow x ee except StopIteration rem break In 20 x Dune 01 099027 924 575 Use exceptions to notify certain conditions are met e g StopIteration or not e g custom error raising 2 9 Object oriented programming OOP Python supports object oriented programming OOP The goals of OOP are to organize the code and to re use code in similar contexts Here is a small example we create a Student class which is an object gathering several custom functions meth ods and variables attributes we will be able to use gt gt gt class Student object def init self name s self name name def set age self age self age age def set major self major self major major gt gt gt anna Student anna gt gt gt anna set_age 21 gt gt gt anna set_major physics In the previous example the Student class has _ init__ set age and set major methods Its at tributes are name age and major We can call these methods and attributes with the following notation clas
191. easure exists for such a period The available data are only measured over 21 years at the Sprog meteorological station located in Denmark First the statistical steps will be given and then illustrated with functions from the scipy interpolate module At the end the interested readers are invited to compute results from raw data and in a slightly different approach Statistical approach The annual maxima are supposed to fit a normal probability density function However such function is not going to be estimated because it gives a probability from a wind speed maxima Finding the maximum wind speed occurring every 50 years requires the opposite approach the result needs to be found from a defined probability That is the quantile function role and the exercise goal will be to find it In the current model it is supposed that the maximum wind speed occurring every 50 years is defined as the upper 2 quantile By definition the quantile function is the inverse of the cumulative distribution function The latter describes the probability distribution of an annual maxima In the exercise the cumulative probability p i for a given year iis defined as p i i N 1 with N 21 the number of measured years Thus it will be possible to calculate the cumulative probability of every measured wind speed maxima From those experimental points the scipy interpolate module will be very useful for fitting the quantile function Finally the 50 years maxima is
192. eat Corton class Reservoir HasTraits name Str max storage Float le6 desc Maximal storage hm3 max release Float 10 desc Maximal release m3 s head Float 10 desc Hydraulic head m efficiency Range 0 1 irrigated areas List IrrigationArea total crop surface Property depends_on irrigated_areas surface def _get_total_crop_surface self return sum iarea surface for iarea in self irrigated areas 17 3 What are Traits 320 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 def energy_production self release Returns the energy production Wh for the given release m3 s power 1000 x 9 81 self head release x self efficiency return power x 3600 traits view View teem name Item max_storage Item max_release Item head Item efficiency Item irrigated areas reem total crop surtace y resizable True if name main upper block IrrigationArea name Section C surface 2000 crop Wheat reservoir Reservoir name Project A max_storage 30 max release 100 0 head 60 efficiency 0 8 irrigated areas upper block release 80 print Releasing m3 s produces kWh format release reservoir energy production release The next example shows how the Array trait can be used to feed a specialised TraitsUI Item the ChacoPlotItem import numpy as np from t
193. eated If rectangular parentheses are used the process is short circuited and we geta list gt gt gt i for i in nums lt generator object lt genexpr gt at 0x gt gt gt gt i for i in nums Pa S gt gt gt list i for i in nums Xe 2e GO In Python 2 7 and 3 x the list comprehension syntax was extended to dictionary and set comprehensions A set is created when the generator expression is enclosed in curly braces A dict is created when the generator expression contains pairs of the form key value gt gt gt i for i in range 3 sen LO d 2 gt gt gt 1 1 2 for i in range 3 Ole 404 ue sre 12 0 If you are stuck at some previous Python version the syntax is only a bit worse gt gt gt set i for i in abc gcc au ets Sese poc Caer ay indecl FOr 4 no 359 Pees ig uL MID ooo Generator expression are fairly simple not much to say here Only one gotcha should be mentioned in old Pythons the index variable i would leak and in versions gt 3 this is fixed 7 1 3 Generators Generators A generator is a function that produces a sequence of results instead of a single value David Beazley A Curious Course on Coroutines and Concurrency A third way to create iterator objects is to call a generator function A generator is a function containing the keyword yield It must be noted that the mere presence of this keyword completely changes the nature of the function this
194. ed in the search path therefore you can write your own modules within directories already defined in the search path e g SHOME local lib python2 7 dist packages You may use symbolic links on Linux to keep the code somewhere else modify the environment variable P Y THONPATH to include the directories containing the user defined mod ules Tip On Linux Unix add the following line to a file read by the shell at startup e g etc profile profile export PYTHONPATH SPYTHONPATH home emma user defined modules On Windows http support microsoft com kb 310519 explains how to handle environment variables or modify the sys path variable itself within a Python script Tip import sys new path home emma user defined modules if new path not in sys path Sys path append new path This method is not very robust however because it makes the code less portable user dependent path and because you have to add the directory to your sys path each time you want to import from a module in this directory See http docs python org tutorial modules html for more information about modules 2 5 6 Packages A directory that contains many modules is called a package A package is a module with submodules which can have submodules themselves etc A special file called init py which may be empty tells Python that the directory is a Python package from which modules can be imported S ls cluster acu README txt Scu
195. egr linear model Lasso alpha 3 gt gt gt regr fit diabetes X train diabetes y train es exo e gt gt gt regr coef_ very sparse coefficients array 0 O 497234075602 199517441034 e i E a 118 89291545 0 430 9379595 op 3 gt gt gt regr score diabetes X test diabetes y test 0 55108354533 35 being the score very similar to linear regression Least Squares gt gt gt lin linear_model LinearRegression gt gt gt lin fit diabetes X train diabetes y train LinearRegression gt gt gt lin score diabetes X test diabetes y test O28 507 5302 Zia ar Different algorithms for a same problem Different algorithms can be used to solve the same mathematical problem For instance the Lasso object in the sklearn solves the lasso regression using a coordinate descent method that is efficient on large datasets However the sklearn also provides the LassoLARS object using the LARS which is very efficient for problems in which the weight vector estimated is very sparse that is problems with very few observations 19 6 Linear model from regression to sparsity 346 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 19 7 Model selection choosing estimators and their parameters 19 7 1 Grid search and cross validated estimators Grid search The scikit learn provides an object that given data computes the score during the fit of an estimator on a parameter grid an
196. en in Python web protocols web frame work etc and scientific computing Development tools automatic testing documentation generation Bi Shell Konsole lt 2 gt ana e Python an advanced Python shell http ipython scipy org moin e Numpy provides powerful numerical arrays objects and routines to manipulate them http www numpy org Scipy high level data processing routines Optimization regression interpolation etc http www scipy org 0 54 0 53 Matplotlib 2 D visualization publication ready plots http matplotlib sourceforge net e Mayavi 3 D visualization http code enthought com projects mayavi 1 3 The interactive workflow IPython and a text editor Interactive work to test and understand algorithms In this section we describe an interactive workflow with IPython that is handy to explore and understand algorithms Python is a general purpose language As such there is not one blessed environment to work in and not only one way of using it Although this makes it harder for beginners to find their way it makes it possible for Python to be 1 3 The interactive workflow IPython and a text editor 6 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 used to write programs in web servers or embedded devices Reference document for this section IPython user manual http ipython org ipython doc dev index html 1 3 1 Command line i
197. eq gt 0 gt gt gt freqs sample freq pidxs gt gt gt power np abs sig_fft pidxs 100 Peak frequency 80 60 plower 40 20 0 050 100 150 200 250 300 350 400 45 0 l 2 3 4 5 Frequency Hz The signal frequency can be found by gt gt gt freq freqs power argmax coc fp ellelose rreq 14 peried f check that correct freq is found True Now the high frequency noise will be removed from the Fourier transformed signal 5 4 Fast Fourier transforms scipy fftpack 105 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt sig fft np abs sample freq gt freq 0 The resulting filtered signal can be computed by the scipy fftpack ifft function porcum mess Gl Geri pack lcs see The result can be viewed with gt gt gt import pylab as plt gt gt gt plt figure o plt ploc time vec sid gt gt gt plt plot time vec main sig linewidth 3 gt gt gt plt xlabel Time s gt gt gt plt ylabel Amplitude M l I ll Amplitude f N NN MMII NIA i Wi i i 10 Time s numpy fft Numpy also has an implementation of FFT numpy ft However in general the scipy one should be preferred as it uses more efficient underlying implementations 5 4 Fast Fourier transforms scipy fftpack 106 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013
198. erator to understand the state which is kept in local variables as opposed to instance attributes which have to be used to pass data between consecutive invocations of next on an iterator object A broader question is why are iterators useful When an iterator is used to power a loop the loop becomes very simple The code to initialise the state to decide if the loop is finished and to find the next value is extracted into a separate place This highlights the body of the loop the interesting part In addition it is possible to reuse the iterator code in other places 7 1 4 Bidirectional communication Each yield statement causes a value to be passed to the caller This 1s the reason for the introduction of generators by PEP 255 implemented in Python 2 2 But communication in the reverse direction is also useful One obvious way would be some external state either a global variable or a shared mutable object Direct communication is possible thanks to PEP 342 implemented in 2 5 It is achieved by turning the previously boring yield statement into an expression When the generator resumes execution after a yield statement the caller can call a method on the generator object to either pass a value into the generator which then is returned by the yield statement or a different method to inject an exception into the generator 7 1 Iterators generator expressions and generators 146 Python Scientific lecture notes Release 2013 2 beta e
199. ered True If no structuring element is provided an element is generated with a square connectivity equal to one iterations int float optional The dilation is repeated iterations times one by default If iterations is less than 1 the dilation is repeated until the result does not change anymore mask array like optional If a mask is given only those elements with a True value at the corresponding mask element are modified at each iteration output ndarray optional Array of the same shape as input into which the output is placed By default a new array is created origin int or tuple of ints optional Placement of the filter by default 0 border value int cast to 0 or 1 Value at the border in the output array Returns out ndarray of bools Dilation of the input by the structuring element See Also Find help Previous Next Highlight all Match case 3 Reached end of page continued from top e Scipy s cookbook http www scipy org Cookbook gives recipes on many common problems frequently en countered such as fitting data points solving ODE etc Matplotlib s website http matplotlib sourceforge net features a very nice gallery with a large number of plots each of them shows both the source code and the resulting plot This is very useful for learning by example More standard documentation is also available X matplotlib home search examples gallery docs modules i
200. erical computing or plotting 1 1 CHAPTER 1 Scientific computing with tools and workflow authors Fernando Perez Emmanuelle Gouillart Ga l Varoquaux Valentin Haenel Why Python 1 1 1 The scientists needs Get data simulation experiment control Manipulate and process data Visualize results to understand what we are doing Communicate results produce figures for reports or publications write presentations 1 1 2 Specifications Rich collection of already existing bricks corresponding to classical numerical methods or basic actions we don t want to re program the plotting of a curve a Fourier transform or a fitting algorithm Don t reinvent the wheel Easy to learn computer science is neither our job nor our education We want to be able to draw a curve smooth a signal do a Fourier transform in a few minutes Easy communication with collaborators students customers to make the code live within a lab or a com pany the code should be as readable as a book Thus the language should contain as few syntax symbols or unneeded routines as possible that would divert the reader from the mathematical or scientific understanding of the code Efficient code that executes quickly but needless to say that a very fast code becomes useless if we spend too much time writing it So we need both a quick development time and a quick execution time A single environment language for everything if possible to avoid lear
201. ery 50 years 5 11 2 Non linear least squares curve fitting application to point extraction in topographical lidar data The goal of this exercise is to fit a model to some data The data used in this tutorial are lidar data and are described in details in the following introductory paragraph If you re impatient and want to practice now please skip it and go directly to Loading and visualization page 129 Introduction Lidars systems are optical rangefinders that analyze property of scattered light to measure distances Most of them emit a short light impulsion towards a target and record the reflected signal This signal is then processed to extract the distance between the lidar system and the target Topographical lidar systems are such systems embedded in airborne platforms They measure distances between the platform and the Earth so as to deliver information on the Earth s topography see for more details In this tutorial the goal is to analyze the waveform recorded by the lidar system Such a signal contains peaks whose center and amplitude permit to compute the position and some characteristics of the hit target When the Mallet C and Bretar F Full Waveform Topographic Lidar State of the Art ISPRS Journal of Photogrammetry and Remote Sensing 64 1 pp 1 16 January 2009 http dx doi org 10 1016 j isprsjprs 2008 09 007 The data used for this tutorial are part of the demonstration data available for the FullAnalyze so
202. es Release 2013 2 beta euroscipy 2013 axes 0 1 0 1 8 8 axes 0 4 0 4 5 5 axes 0 2 0 2 3 3 axes 0 3 0 3 5 5 axes 0 2 0 2 5 5 axes 0 1 0 1 8 8 4 3 4 Ticks Well formatted ticks are an important part of publishing ready figures Matplotlib provides a totally configurable system for ticks There are tick locators to specify where ticks should appear and tick formatters to give ticks the appearance you want Major and minor ticks can be located and formatted independently from each other Per default minor ticks are not shown i e there is only an empty list for them because it is as Null Locator see below Tick Locators Tick locators control the positions of the ticks They are set as follows ax pl gca ax xaxis set major locator eval locator NullLocator MultipleLocator 1 0 ee Hv OF YY Yn DC YOO YP YY E E dnd dm TV PT YY YY Yn Yn VO YC OP OO YY PY 0 1 2 3 4 5 6 7 8 9 1C FixedLocator O 2 8 9 10 0 2 8 9 1C IndexLocator 3 1 1 4 7 10 LinearLocator 5 0 25 5 0 7 5 10 LogLocator 2 1 0 1 2 4 8 AutoLocator There are several locators for different kind of requirements E s 5 j All of these locators derive from the base class matplotlib ticker Locator You can make your own locator deriving from it Handling dates as ticks can be especially tricky Therefore matplotlib provides special locators in matplotlib dates 4
203. es Release 2013 2 beta euroscipy 2013 18 2 2 The script recording button To find out what code can be used to program these changes click on the red button as you modify those properties and it will generate the corresponding lines of code 18 3 Slicing and dicing data sources modules and filters 18 3 1 An example inspecting magnetic fields Suppose we are simulating the magnetic field generated by Helmholtz coils The examples compute_field py script does this computation and gives you a B array that is 3 x n where the first axis is the direction of the field Bx By Bz and the second axis the index number of the point Arrays X Y and Z give the positions of these data points Excercise Visualize this field Your goal is to make sure that the simulation code is correct Suggestions e If you compute the norm of the vector field you can apply an isosurface to it e using mayavi mlab quiver3d you can plot vectors You can also use the masking options in the GUI to make the plot a bit less dense 18 3 2 Different views on data sources and modules Tip As we see above it may be desirable to look at the same data in different ways 18 3 Slicing and dicing data sources modules and filters 331 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Mayavi visualization are created by loading the data in a data source and then displayed on the screen using Inoc ues This can be seen by
204. et trace Warning When running nosetests the output is captured and thus it seems that the debugger does not work Simply run the nosetests with the s flag 9 3 Using the Python debugger 199 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Graphical debuggers and alternatives For stepping through code and inspecting variables you might find it more convenient to use a graph ical debugger such as winpdb e Alternatively pudb is a good semi graphical debugger with a text user interface in the console Also the pydber project is probably worth looking at 9 3 2 Debugger commands and interaction a Printthe Tocal variables O O O Execute the given Python command by opposition to pdb commands Warning Debugger commands are not Python code You cannot name the variables the way you want For instance if in you cannot override the variables in the current frame with the same name use different names then your local variable when typing code in the debugger Getting help when in the debugger Type h or help to access the interactive help ipdb gt help Documented commands type help lt topic gt EOF DE omi enable jump pdef ls tbreak W a e continue exit al pdoe restart u whatis alias QI d h list pinfo return unalias where RS clear debug help n pp run unt b commands disable ignore next q S Eb break condition down J p g ir step up Miscellaneous help topics pere AV
205. etcher good at hand waving explainations 247 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Chapters contents e Knowing your problem page 248 Convex versus non convex optimization page 249 Smooth and non smooth problems page 249 Noisy versus exact cost functions page 250 Constraints page 250 A review of the different optimizers page 250 Getting started 1D optimization page 250 Gradient based methods page 251 Some intuitions about gradient descent page 251 Conjugate gradient descent page 252 Newton and quasi newton methods page 253 x Newton methods using the Hessian 2nd differential page 253 Quasi Newton methods approximating the Hessian on the fly page 255 Gradient less methods page 255 A shooting method the Powell algorithm page 255 Simplex method the Nelder Mead page 256 Global optimizers page 257 Brute force a grid search page 257 Simulated annealing page 257 Practical guide to optimization with scipy page 257 Choosing a method page 257 Making your optimizer faster page 258 Computing gradients page 258 Synthetic exercices page 259 Special case non linear least squares page 259 Minimizing the norm of a vector function page 259 Curve fitting page 260 e Optimization with constraints page 261 Box bounds page 261 General constraints page 261 13 1 Knowing your problem N
206. euroscipy 2013 e Since the type maps only support the signature ARRAY SIZE we need to wrap the cos doubles as cos doubles func which takes two arrays including sizes as input e As opposed to the simple SWIG example we don t include the cos doubles h header There is nothing there that we wish to expose to Python since we expose the functionality through cos doubles func And as before we can use distutils to wrap this from distutils core import setup Extension import numpy setup ext modules Extension cos doubles sources cos doubles el cos doubles z include dirs numpy get include 1 As previously we need to use include dirs to specify the location ls cos doulbles c ccos doubles n cos doubles i numpy i Setubp py test cos doubles py python setup py build ext i r nning build ext bualding cos doubles extension swigging cos doubles si to cos doubles wrap swig python o Cos doubles wrap Cos doubles lt i Geos doubles i 24 Warning 490 Fragment NumPy Backward Compatibility not found Cos_doubles 1 24 Warning 490 gt Fragment NumPy Backward Compatibility mot found cos doubles i 24 Warning 490 Fragment NumPy Backward Compatibility not found creating build creating build temp linux x36 64 2 7 Queue c memos sq qoe cec OS IDINIBIS EUG a ara OS Wall wer e rat otypes fPIC gce pthread fno strict aliasing 9 O2 DNDEBUG 9 wea O gt Wall WwW etrict
207. euroscipy 2013 print defining the decorator def decorator function print doing decoration y ard def _wrapper xargs xkwargs print inside wrapper args kwargs return function xargs xxkwargs return functools update wrapper wrapper function return decorator gt gt gt dbetter replacing decorator with args abc def function extensive documentation print inside function Ks return 14 defining the decorator doing decoration abc gt gt gt unction STE LOM Bnet onc Ws c gt gt gt print fonccion doc _ extensive documentation One important thing is missing from the list of attributes which can be copied to the replacement func tion the argument list The default values for arguments can be modified through the defaults __kwdefaults__ attributes but unfortunately the argument list itself cannot be set as an attribute This means that help function will display a useless argument list which will be confusing for the user of the function An effective but ugly way around this problem is to create the wrapper dynamically using eval This can be automated by using the external decorator module It provides support for the decorator decorator which takes a wrapper and turns it into a decorator which preserves the function signature To sum things up decorators should always use functools update wrapper or some other means of copying function attributes 7 2 4 Examples in the standard library
208. ever changes the type mo a np array ll 27 21 gt gt gt a dtype dtype int64 gt gt gt a 0 1 9 lt float is truncated to integer gt gt gt a array l x1 Forced casts 3 3 More elaborate arrays 67 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 vow a NOsarray lev lx e gt gt gt b a astype int lt truncates to integer gt gt gt b array RM Rounding gt gt gt d np array 1 2 Lis doy 2 5 ay bim gt gt gt b np around a gt gt gt b P SLIII Tloating point Hrsg ia D vr P PET 4 4 gt gt gt c np around a astype int gt gt gt C duree 2 2 sump 27 2 Different data type sizes Integers signed I6 bit 32 bits same as int on 32 bit platform 64 bits same as int on 64 bit platform gt gt gt np array 1 dtype int dtype dtype int64 Ao gt Pino np into o2 max rode I 2147483647 2147483647 gt gt Vipelinro np Into max 24403 1 0223972056994 17590 9223 720368547 920 71 Unsigned integers gt gt gt ND AO NO UIN S2 Max oec Sp 4294967295 4294967295 gt gt gt MP iinfo Mp lint oA 2max wo 1 18446744073709551615L 18446744073709551615L Floating point numbers floati16 16 bits float32 32 bits float64 64 bits same as float float96 96 bits platform dependent same as np 1ongdoub1e float128 128 bits platform dependent same as n
209. f lines of code outside framework or application code with short modify run fail cycles 1 Make it fail reliably Find a test case that makes the code fail every time 2 Divide and Conquer Once you have a failing test case isolate the failing code Which module Which function e Which line of code gt isolate a small reproducible failure a test case 3 Change one thing at a time and re run the failing test case 4 Use the debugger to understand what is going wrong 5 Take notes and be patient It may take a while Note Once you have gone through this process isolated a tight piece of code reproducing the bug and fix the bug using this piece of code add the corresponding code to your test suite 9 3 Using the Python debugger The python debugger pdb http docs python org library pdb html allows you to inspect your code interactively Specifically it allows you to View the source code Walk up and down the call stack nspect values of variables Modify values of variables e Set breakpoints print Yes print statements do work as a debugging tool However to inspect runtime it is often more efficient to use the debugger 9 2 Debugging workflow 195 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 9 3 1 Invoking the debugger Ways to launch the debugger 1 Postmortem launch debugger after module errors 2 Launch the module with the debugger 3 Call the debug
210. f release changed self new pass e def release changed self old new pass e def release changed self name old new pass Listening to all the changes To listen to all the changes on a HasTraits class the magic any trait changed method can be implemented In many situations you do not know in advance what type of listeners need to be activated Traits offers the ability to register listeners on the fly with the dynamic listeners from reservoir import Reservoir from reservoir state property import ReservoirState def wake up watchman if spillage new value if new value gt 0 print Wake up watchman Spilling hm3 format new value if name main n 17 3 What are Traits 317 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 projectA Reservoir name Project A max_storage 30 max release 100 0 hydraulic head 600 efficiency 0 8 State ReservoirState reservoir projectA storage 10 register the dynamic listener state on_trait_change wake_up_watchman_if_spillage name spillage state release 90 Stare Nimi Vows 0 state print_state print Forcing spillage state inflows 100 state release O0 print Why do we have two executions of the callback The dynamic trait notification signatures are not the same as the static ones def wake up watchman pass def wake up watchman new pass def wake up watchman name new pass
211. ftware and were kindly provided by the GIS DRAIX 5 11 Summary exercises on scientific computing 128 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 footprint of the laser beam is around 1m on the Earth surface the beam can hit multiple targets during the two way propagation for example the ground and the top of a tree or building The sum of the contributions of each target hit by the laser beam then produces a complex signal with multiple peaks each one containing information about one target One state of the art method to extract information from these data is to decompose them in a sum of Gaussian functions where each function represents the contribution of a target hit by the laser beam Therefore we use the scipy optimize module to fit a waveform to one or a sum of Gaussian functions Loading and visualization Load the first waveform using gt gt gt import numpy as np gt gt gt waveform 1 np load data waveform 1 npy and visualize it gt gt gt import matplotlib pyplot as plt gt gt gt t np arange len waveform 1 gt gt gt plt plot t wavertorm gt gt gt plt show Intensity bins 0 10 20 30 AQ 50 60 70 80 Time ns As you can notice this waveform is a 80 bin length signal with a single peak Fitting a waveform with a simple Gaussian model The signal is very simple and can be modeled as a single Gaussian function and an offset corresponding to the back
212. function P return 25 40 3 oo e se Dur Sc Os 2 eZ gt gt gt def fprime x return jdpcarsrdyv 2c 5 e0b x9 2ex O0 gt Coll x0 ee2 25 et 0 ee 2 gt gt gt optimize fmin ncg f 2 2 fprime fprime Optimization terminated successfully Current functwon value 05000000 iterations 10 Pumice tom evaluations I Gradient evaluations 44 Hessian evaluations 0 cuan ee kel Note that compared to a conjugate gradient above Newton s method has required less function evaluations but more gradient evaluations as it uses it to approximate the Hessian Let s compute the Hessian and pass it to the algorithm gt gt gt def hessian x Computed with sympy return ne emray CCl ee a Ae Oe Kae canes Mea us y yn gt gt gt optimize fmin ncg f 2 2 fprime fprime fhess hessian Optimization terminated successfully Current function value 0 000000 Iterations 10 Function evaluations 12 Gradient evaluations 10 Hessian evaluations 10 array dec dee Note At very high dimension the inversion of the Hessian can be costly and unstable large scale gt 250 Note Newton optimizers should not to be confused with Newton s root finding method based on the same principles scipy optimize newton 13 2 A review of the different optimizers 254 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Quasi Newton methods approximating the Hessian on the fly BFGS BFG
213. g lt No docsiring In 3 dir cos_module Out 3 s jer qe Ete us NEAL ro Yoo tile y _name_ 7 T package cos module ewclass 0bgeot 1 Swig getabtr Swig property SWig repr swig setattr 5 SwigG Setzs t 1 Mondynaimc COs tune In 4 cos module cos func l 0 Cuc lai 20 554205209 50591591 399 In 5 cos moduler cos Eune OTO Cur oe p do in 16 cos modulbsvccos tupno 5 1159029552559 Chie Mo et Again we test for robustness and we see that we get a better error message although strictly speaking in Python there is no double type 14 4 SWIG 273 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Jw OB ror Traceback most recent call Past rpvEhon smnput 7 11bee4956050 vm lt module gt gt cos mocule cos Funel roo TwpeError in method cos runc argument 1 of type double 14 4 2 Numpy Support Numpy provides support for SWIG with the numpy i file This interface file defines various so called typemaps which support conversion between Numpy arrays and C Arrays In the following example we will take a quick look at how such typemaps work in practice We have the same cos doubles function as in the ctypes example void cos doubles double in array double out array int size include lt math h gt Compute the cosine of each element in in array storing the result in uum 7 voi
214. g With LaTeX Annotating text Artist tutorial Introduction Customizing your objects Object containers Figure container Axes container Axis containers Tick containers Path tutorial Introduction B zier example Compound paths Transforms tutorial Introduction Data coordinates Axes coordinates Blended transformations Using offset transforms to create a shadow effect The transformation pipeline 4 5 2 Matplotlib documentation User guide FAQ Installation Usage How To Troubleshooting Environment Variables e Screenshots 4 5 3 Code documentation The code is well documented and you can quickly access a specific command from within a python session gt gt gt import pylab as pl gt gt gt nelocspl plot Help on function plot in module matplotlib pyplot plot css ARVs Plot lines and or markers tco che wolagsss ma l plotlib axes Axes xargs is a variable length argument allowing for multiple sx vx pairs wich an optional format s ESO For example each of the following is legals s plot x 3 plot x Palko aya Do plot x plier y 7 lou y poc 2 ote i xot and y using default line style and color and y using blue circle markers using as Index array NS but with red plusses 4 5 Beyond this tutorial 98 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 If xx and or y is 2 dimensional then the corresponding columns will
215. ge low min_release high max_release spillage Property desc Spillage hm3 depends_on storage inflows release Ht Private traits TESTRRESESERERETRETRERERSEEE ATRSERSTRESAERER AEHTTEEESESTETTTTT storage Float Traits property implementation T b9tf yT syTSSdP STESTPETPSTPSPT STSTPST ST T def get storage self new storage self storage self release self inflows return min new storage self max storage def set storage self storage value self storage storage value def get spillage self new storage self storage self release self inflows overflow new storage self max storage return max overflow 0 def print state self print Storage tRelease tInflows tSpillage Str format VE join 27 22 for in rauge 4 1 print str_format format self storage self release self inflows self spillage print 79 17 3 What are Traits 313 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 if name e maim ni projectA Reservoir name Project A max_storage 30 max release 5 hydraulic head 600 efficiency 0 8 State ReservoirState reservoir projectA storage 25 state release 4 State inflows state print state Note Caching property Heavy computation or long running computation might be a problem when accessing a property where the inputs have not changed The Q cached property decorator
216. ger inside the module Postmortem Situation You re working in IPython and you get a traceback Here we debug the file index error py When running it an IndexError is raised Type debug and drop into the debugger In 1 run 1ndex error py IndexError Traceback most recent call last home varoquau dev scipy lecture notes advanced debugging optimizing index error py in lt module gt 6 7 if name main gt 8 index error 9 home varoquau dev scipy lecture notes advanced debugging optimizing index error py in index erro 3 def index error 4 st list foobar SS Os proe Let lens kee 6 Uu gu IndexError list index out of range In 2 debug gt home varoquau dev scipy lecture notes advanced debugging optimizing index error py 5 index err 4 lst list foobar ae N print lst len lst 6 nyc Jest 1 Ssmall snippet to Talse an IndexError 2 3 def index error 4 rst e ristt rtocobar E n print Ist len ise 6 7 if _name_ main 8 index error 9 ipdb gt len lst wpdo gt print Asie Vern lst i uos guit 9 3 Using the Python debugger 196 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Post mortem debugging without IPython In some situations you cannot use Python for instance to debug a script that wants to be called from the command line In this case you can call the script with python m pdb sc
217. given and a gradient computed numerically sos copcuncze cheek corad b Prines T r 21 2059279509 g0TS6256 07 See also scipy optimize approx fprime to find your errors 13 3 Practical guide to optimization with scipy 258 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 13 3 4 Synthetic exercices Exercice A simple quadratic function Optimize the following function using K 0 as a starting point np random seed 0 K np random normal size 100 100 def f x return nunp sum np dot K x 1 2Z 4 no sum x Z x2 Time your approach Find the fastest approach Why is BFGS not working well Exercice A locally flat minimum Consider the function exp 1 1 x 2 yx x2 This function admits a minimum in 0 0 Starting from an initialization at 1 1 try to get within le 8 of this minimum point 13 4 Special case non linear least squares 13 4 1 Minimizing the norm of a vector function Least square problems minimizing the norm of a vector function have a specific structure that can be used in the Levenberg Marquardt algorithm implemented in scipy optimize leastsq Lets try to minimize the norm of the following vectorial function gt gt gt def f x return Np arcran x np earctam np luvumspaee 0 1 Lent zx X0 Mp Zeros 10 13 4 Special case non linear least squares 259 Python S
218. going to be evaluated from the cumulative probability of the 2 quantile Computing the cumulative probabilities The annual wind speeds maxima have already been computed and saved in the numpy format in the file examples max speeds npy thus they will be loaded by using numpy 5 11 Summary exercises on scientific computing 124 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt import numpy as np gt gt gt max speeds np load intro summary exercises examples max speeds npy gt gt gt Yeats mb Max speeds shape 0 Following the cumulative probability definition p i from the previous section the corresponding values will be gt gt gt Cprob np arange years nb dbypesnp float32 1 years nb t 1 and they are assumed to fit the given wind speeds gt gt gt Sorted max speeds np sort max speeds Prediction with UnivariateSpline In this section the quantile function will be estimated by using the UnivariateSpline class which can represent a spline from points The default behavior is to build a spline of degree 3 and points can have different weights according to their reliability Variants are InterpolatedUnivariateSpline and LSQUnivariateSpline on which errors checking is going to change In case a 2D spline is wanted the BivariateSpline class family is provided All those classes for 1D and 2D splines use the FITPACK For tran subroutines that s why a lower library access i
219. ground noise To fit the signal with the function we must 5 11 Summary exercises on scientific computing 129 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 define the model propose an initial solution e call scipy optimize leastsq Model A Gaussian function defined by T B Aexp lt c can be defined in python by gt gt gt def model t coeffs return cociis 0 coetrs il smpeespu Qic ooetftsi2l905 gostEs S y2 7 where e coeffs 0 is B noise e coeffs 1 is A amplitude e coeffs 2 is u center e coeffs 3 is o width Initial solution An approximative initial solution that we can find from looking at the graph is for instance Por 30 no acca lor 305 15 1 deyoe float Fit scipy optimize leastsq minimizes the sum of squares of the function given as an argument Basically the function to minimize 1s the residuals the difference between the data and the model gt gt gt def residuals coeffs y t return y model t coeffs So let s get our solution by calling scipy optimize leastsq with the following arguments the function to minimize an initial solution the additional arguments to pass to the function gt gt gt from scipy optimize import leastsq gt gt gt x flag leastsq residuals x0 args waveform 1 t gt gt gt print x ls 42 7gso394d4 27282070742 1547924562 535 05636223 And visualize the solution c
220. gt gt gauss denoised ndimage gaussian filter noisy 2 Most local linear isotropic filters blur the image ndimage uniform filter A median filter preserves better the edges gt gt gt med denoised ndimage median filter noisy 3 noisy Gaussian filter Median filter AT 4 Median filter better result for straight boundaries low curvature qum Megzeros 205 20 HES ie cu se im ndimage distance_transform_bf im im noise im 0 2 np random randn im shape im med ndimage median filter im noise 3 Original image Noisy image Median filter Error Other rank filter ndimage maximum filter ndimage percentile filter Other local non linear filters Wiener scipy signal wiener etc Non local filters 12 4 Image filtering 237 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Exercise denoising Create a binary image of Os and 1s with several objects circles ellipses squares or random shapes e Add some noise e g 20 of noise Try two different denoising methods for denoising the image gaussian filtering and median filtering Compare the histograms of the two different denoised images Which one is the closest to the his togram of the original noise free image 12 4 4 Mathematical morphology See http en wikipedia org wiki Mathematical_morphology Probe an image with a simple shape a structuring element and modify this image acc
221. gt gt gt gt gt gt gt gt gt new_viewer viewer ImageViewer coins from skimage viewer plugins import lineprofile new viewer lineprofile LineProfile new viewer show 16 6 Data visualization and interaction 302 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 250 200 150 100r 20 20 100 150 200 Image Viewer X File 28 160 231 16 7 Feature extraction for computer vision Geometric or textural descriptor can be extracted from images in order to classify parts of the image e g sky vs buildings match parts of different images e g for object detection and many other applications of Computer Vision 16 7 Feature extraction for computer vision 303 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt from skimage import feature Example detecting corners using Harris detector from skimage feature import corner_harris corner_subpix corner_peaks from skimage transform import warp AffineTransform tform AffineTransform scale 1 3 1 1 rotation 1 shear 0 7 translation 210 50 image warp data checkerboard tform inverse output_shape 350 350 coords corner_peaks corner harris image min distance 5 coords_subpix corner_subpix image coords window_size 13 this ex ample is taken from http scikit image org docs dev auto_examples plot_corner html Points of interest such as corners can then be
222. gt label_im nb_labels ndimage label mask gt gt gt nb_labels how many regions 29 gt gt gt plt imshow label im matplotlib image AxesImage object at gt Compute size mean value etc of each region gt gt gt sizes ndimage sum mask label im range nb labels 1 gt gt gt mean vals ndimage sum im label im range 1 nb labels 1 Clean up small connect components 12 6 Measuring objects properties ndimage measurements 243 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt mask_size sizes lt 1000 gt gt gt remove_pixel mask_size label_im gt gt gt remove_pixel shape 2967 2906 gt gt gt label im remove pixel 0 gt gt gt plt imshow label im matplotlib image AxesImage object at gt Now reassign labels with np searchsorted gt gt gt labels np unique label im gt gt gt label im np searchsorted labels label im Find region of interest enclosing object gt gt gt slice x slice y ndimage find_objects label_im 4 0 gt gt gt roi im slice_x slice_y gt gt gt Dill imshow ro lt matplotlib image AxesImage object at gt Other spatial measures ndimage center of mass ndimage maximum position etc Can be used outside the limited scope of segmentation applications Example block mean 12 6 Measuring objects properties ndimage measurements 244 Python Scientific lecture notes
223. gu ments answer pairs Python 3 2 e functools total_ordering is a class decorator which fills in missing ordering methods __1t__ Bt le based on a single available one Python 2 7 b 7 2 5 Deprecation of functions Let s say we want to print a deprecation warning on stderr on the first invocation of a function we don t like anymore If we don t want to modify the function we can use a decorator class deprecated object WUUNP PING d deprecacion warning Once on IAIrfsSL use or Che funcbioni gt gt gt deprecated doctest SKIP def f pass R doctest SKIP f is deprecated def call self func self func func self count 0 return self wrapper def _wrapper self xargs xkwargs self count I if self count print self func name is deprecated return self func xargs xxkwargs It can also be implemented as a function def deprecated func TEMP EDO a deprecation warning once On Tirst use Or The Tunction gt gt gt deprecated F doctes t TKIP def f I pass SS doctest SKIP f is deprecated n mm count 0 def wrapper xargs xxkwargs Coume Ol ae 7 2 Decorators 154 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 IE cone print func name is deprecated return func xargs xkKwargs return wrapper 7 2 6 A while loop removing decorator Let s say we have function which returns a lists of th
224. he outputs of svd with np dot gt gt gt sarr np diag spec gt gt gt svd_mat uarr dot sarr dot vharr Linear algebra operations scipy linalg 104 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 caca sede waste True SVD is commonly used in statistics and signal processing Many other standard decompositions QR LU Cholesky Schur as well as solvers for linear systems are available in scipy linalg 5 4 Fast Fourier transforms scipy fftpack The scipy fftpack module allows to compute fast Fourier transforms As an illustration a noisy input signal may look like gt gt gt time step 0 02 gt gt gt period 5 gt gt gt time vec np arange 0 20 time step poo Sig mesa 2c m a 7 period aa tne ya a x 0 5 np random randn time vec size The observer doesn t know the signal frequency only the sampling time step of the signal sig The signal is supposed to come from a real function so the Fourier transform will be sym metric The scipy fftpack fftfreq function will generate the sampling frequencies and scipy fftpack fft will compute the fast Fourier transform gt gt gt from scipy import fftpack gt gt gt sample freq fftpack fftfreq sig size d time step 22 gt SUO OEIL Tipos birt E Because the resulting power is symmetric only the positive part of the spectrum needs to be used for finding the frequency gt gt gt pidxs np where sample fr
225. here as you would write 1t 1n Python Say use 100 as the maximum number of iterations and 1000 as Ehe CULOLE for ZerealxxZ 4 Zeimag Z se HE db db db odb od TODO mandelbrot iteration should go here Return the answer for this point z out v Boilerplate Cvthonm definitions it The litany below is partic larly long but you don t really meed to t read this part it just pulls in stutr from the Numpy C headers cdef extern from numpy arrayobject h yoid impor array ctypedef int npy_intp eder enum NPY TYPES NEY DOUBLE NPY SCUOUB TEE NPY LONG Cdet extern irom Thum y U Uncob ject h vord Impor urunc Ctypedef void xPyUPuncGenervchRupnctron charese Ney _intps MNpy_imeps void object PyUPFunc RromPuncArndDsta PyUPGuncGenerrcFunctrone tunc wvodxw data Chars types Int Meypes dne Nin ams mous int identity Char Name Char doc sb x List of pre defined loop functions vord PyUPUMC E f As d eharkte Jaks TEY InP dimensions NPY 10L Steps Voldy void PyUPUnG d d char args npy_ inp dimensions movent pe steps vord Func Vorld PYUP UNG Eo Chark argo NEY Intp imens ions Ney INP Steps volds ume void PyUkunc g g Chars s args Npy in ips dimensions nP int ps Steps voids dune void PyUkunc F F AS D Dchar args mpyrcuantpe dimensions Apy Intp Seeps Oso void PyUkuUNC F F Char s args Npy intpp dimensions Moy intps Steps vold func void PYUPUNG D D chars args mpy 1ntps dimensions
226. hmic optimization page 207 Example of the SVD page 207 Writing faster numerical code page 208 Additional Links page 210 10 1 Optimization workflow 1 Make it work write the code in a simple legible ways 2 Make it work reliably write automated test cases make really sure that your algorithm is right and that if you break it the tests will capture the breakage 3 Optimize the code by profiling simple use cases to find the bottlenecks and speeding up these bottleneck finding a better algorithm or implementation Keep in mind that a trade off should be found between profiling on a realistic example and the simplicity and speed of execution of the code For efficient work it is best to work with profiling runs lasting around 10s 203 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 10 2 Profiling Python code No optimization without measuring Measure profiling timing You ll have surprises the fastest code is not always what you think 10 2 1 Timeit In IPython use timeit http docs python org library timeit html to time elementary operations In 1 import numpy as np In 2 a np arange 1000 In 3 timeit a x 2 100000 loops best of 3 5o79 US per loop In 4 timeit a xx 2 1 LOOO loops best of 3 134 us per Joop In So cccMmelte se ca 100000 loops best or 3 3 56 US per loop Use this to guide your choice between strategies Note For long runn
227. hon Scientific lecture notes Release 2013 2 beta euroscipy 2013 Postprocessing label images Skimage provides several utility functions that can be used on label images e images where different discrete values identify different regions Functions names are often self explaining skimage segmentation clear_border skimage segmentation relabel_from_one skimage morphology remove_small_objed etc Exercise Load the coins image from the data submodule e Separate the coins from the background by testing several segmentation methods Otsu thresholding adaptive thresholding and watershed or random walker segmentation If necessary use a postprocessing function to improve the coins background segmentation 16 5 Measuring regions properties gt gt gt from skimage import measure gt gt gt measure regionprops Example compute the size and perimeter of the two segmented regions gt gt gt measure regionprops labels rw properties Area Perimeter i Perzmeter 117 25465399593905 Area mi 770 0 Labet s 1 M Perimecrer s Mo 1543789325507 Area Lross0 babel 2 See also for some properties functions are available as well in scipy ndimage measurements with a different API a list is returned Exercise cont d Use the binary image of the coins and background from the previous exercise Compute an image of labels for the different coins Compute the size and eccentri
228. hon language Only the bare minimum necessary for getting started with Numpy and Scipy is addressed here To learn more about the language consider going through the excellent tutorial http docs python org tutorial Dedicated books are also available such as http diveintopython org python Tip Python is a programming language as are C Fortran BASIC PHP etc Some specific features of Python are as follows an interpreted as opposed to compiled language Contrary to e g C or Fortran one does not compile Python code before executing it In addition Python can be used interactively many Python interpreters are available from which commands and scripts can be executed a free software released under an open source license Python can be used and distributed free of charge even for building commercial software multi platform Python is available for all major operating systems Windows Linux Unix MacOS X most likely your mobile phone OS etc a very readable language with clear non verbose syntax a language for which a large variety of high quality packages are available for various applications from web frameworks to scientific computing e a language very easy to interface with other languages in particular C and C e Some other features of the language are illustrated just below For example Python is an object oriented language with dynamic typing the same variable can contain objects of different
229. ial erf 5 3 Linear algebra operations scipy linalg The scipy linalg module provides standard linear algebra operations relying on an underlying efficient implementation BLAS LAPACK 5 3 The scipy linalg det function computes the determinant of a square matrix gt gt gt from scipy import linalg aoe are e Heverray i ils 205 E o D gt gt gt linalg det arr 7 0 po arr npoarrteay Db3 2 Ss eo An gt gt gt linalg det arr 0 0 gt gt gt Irnalg det np onest 3 4 Traceback most recent call last ValueError expected square matrix The scipy linalg inv function computes the inverse of a square matrix gt gt gt arr e np diray lil 215 eR v EI pore Tarr essc Eno ic gt gt gt jarr array CM em Tee ILS OO el gt gt gt np salilG lose mp dor arr larr moeevye 2 True Finally computing the inverse of a singular matrix its determinant is zero will raise LinAlgError ss arr np srsay lbey 215 jos ion Tu aoe dare ps arr Traceback most recent call last LonAcgEFEBoOr Ssimgular matrix More advanced operations are available for example singular value decomposition SVD poc arr Np arange 9 reshape 3 3 np diag ll 0 110 gt gt gt Warr spec vharr i nalg svd arr The resulting array spectrum is gt gt gt spec array 14 88982544 Qd sp Od SC 0329654967 The original matrix can be re composed by matrix multiplication of t
230. ibute access 7 2 Decorators 152 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt class A object property def a self an important attribute return a value gt gt gt Aa Spropercvy Ob ject gt Ox gt gt gt A a a value In this example A a is an read only attribute It is also documented help A includes the docstring for attribute a taken from the getter method Defining a as a property allows it to be a calculated on the fly and has the side effect of making it read only because no setter is defined To have a setter and a getter two methods are required obviously Since Python 2 6 the following syntax is preferred class Rectangle object def init self edge self edge edge property def area self Computed area Setting this updates the edge length to the proper value n m return self edgex 2 area setter def area self area self edge area x 0 5 The way that this works is that the property decorator replaces the getter method with a property object This object in turn has three methods get ter setter and deleter which can be used as decorators Their job is to set the getter setter and deleter of the property object stored as attributes fget fset and fdel The getter can be set like in the example above when creating the object When defining the setter we already have the property object under area and we add the setter
231. ication page 316 Some more advanced traits page 319 References page 322 305 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 17 1 Introduction Tip The Enthought Tool Suite enable the construction of sophisticated application frameworks for data analysis 2D plotting and 3D visualization These powerful reusable components are released under liberal BSD style licenses Mayavi TVTK Traits VTK Envisage sgoualizatig oe Na a The main packages of the Enthought Tool Suite are e Traits component based approach to build our applications Kiva 2D primitives supporting path based rendering affine transforms alpha blending and more Enable object based 2D drawing canvas Chaco plotting toolkit for building complex interactive 2D plots Mayavi 3D visualization of scientific data based on VTK Envisage application plugin framework for building scriptable and extensible applications In this tutorial we will focus on Traits 17 2 Example Throughout this tutorial we will use an example based on a water resource management simple case We will try to model a dam and reservoir system The reservoir and the dams do have a set of parameters e Name Minimal and maximal capacity of the reservoir hm3 Height and length of the dam m e Catchment area km2 17 1 Introduction 306 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013
232. imitation of contiguous single dimensional Numpy arrays since the C functions requires this kind of buffer e Also note that the output array must be preallocated for example with numpy zeros and the function will write into it s buffer e Although the original signature of the cos doubles function is ARRAY ARRAY int the final cos doubles func takes only two Numpy arrays as arguments And as before we convince ourselves that it worked import numpy as np import pylab import cos doubles x np arange 0 2 x np pi 0 1 y np empty like x cos doubles cos doubples runece x y pylab plot x y pylab show 14 4 SWIG SWIG the Simplified Wrapper Interface Generator is a software development tool that connects programs written in C and C with a variety of high level programming languages including Python The important thing with SWIG is that it can autogenerate the wrapper code for you While this is an advantage in terms of development 14 4 SWIG 271 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 time it can also be a burden The generated file tend to be quite large and may not be too human readable and the multiple levels of indirection which are a result of the wrapping process may be a bit tricky to understand Note The autogenerated C code uses the Python C Api Advantages Can automatically wrap entire libraries given the headers Works ni
233. ince a function or a class are objects they can be passed around Since they are mutable objects they can be modified The act of altering a function or class object after it has been constructed but before is is bound to its name is called decorating There are two things hiding behind the name decorator one is the function which does the work of decorating i e performs the real work and the other one is the expression adhering to the decorator syntax i e an at symbol and the name of the decorating function Function can be decorated by using the decorator syntax for functions Qdecorator e def function Q pass 7 2 Decorators 148 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e A function is defined in the standard way e An expression starting with placed before the function definition is the decorator The part after must be a simple expression usually this is just the name of a function or class This part is evaluated first and after the function defined below is ready the decorator is called with the newly defined function object as the single argument The value returned by the decorator is attached to the original name of the function Decorators can be applied to functions and to classes For classes the semantics are identical the original class definition is used as an argument to call the decorator and whatever is returned is assigned under the original name Befo
234. ing calls using t ime instead of t imeit itis less precise but faster 10 2 2 Profiler Useful when you have a large program to profile for example the following file For this example to run you also need the ica py file import numpy as np from scipy import linalg from ica import fastica def test data Npsrancom random 5000 100 u S v linalg svd data Pca MEL doe Ae O data results fastica pca T whiten False if name main rest Note This is a combination of two unsupervised learning techniques principal component analysis PCA and independent component analysis ICA lt http en wikipedia org wiki Independent_component_ana lysis gt _ PCA is a technique for dimensionality reduction i e an algorithm to explain the observed variance in your data using less dimensions ICA is a source seperation technique for example to unmix multiple signals that have been recorded through multiple sensors Doing a PCA first and then an ICA can be useful if you have more sensors than signals For more information see the FastICA example from scikits learn 10 2 Profiling Python code 204 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 To run it you also need to download the ica module In Python we can time the script In li srun t demo py EPython CPU timings estimated User 1d 9S S System Q 2560160 S and profile it In 2 2 tun p demo
235. inga MoKromnolhoogy diamond s est vibe pt m erus xc Oi Eq re Or hel n Ol Obs es le ee es Oks 308 2 ers dee SUIS LO Ov 0 0 0 lsdbyvoe urniueo Opening removes small objects and smoothes corners Grayscale mathematical morphology Mathematical morphology operations are also available for non binary grayscale images int or float type Erosion and dilation correspond to minimum resp maximum filters Higher level mathematical morphology are available tophat skeletonization etc See also Basic mathematical morphology is also implemented in scipy ndimage morphology The scipy ndimage implementation works on arbitrary dimensional arrays Example of filters comparison image denoising from skimage import filter colms data coins conns zoom lt coinme 10s s0 5002370 median coins filter median_filter coins zoom tv coins filter tv denoise coins zoom weight 0 1 from scipy import ndimage gaussian coins ndimage gaussian_filter coins sigma 2 Gaussian filter Median filter TV filter 16 4 Image segmentation Segmentation filter that maps an image onto an image of labels corresponding to different regions 16 4 Image segmentation 298 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 16 4 1 Histogram based method Otsu thresholding Tip The Otsu method is a simple heuristic to find a threshold to separate the foreground from the background
236. ings and this list created by running a loop If we don t know how many objects will be needed the standard way to do this is something like def find answers answers while True ans look for next answer if ans is None break answers append ans return answers This is fine as long as the body of the loop is fairly compact Once it becomes more complicated as often happens in real code this becomes pretty unreadable We could simplify this by using yield statements but then the user would have to explicitly call List find answers We can define a decorator which constructs the list for us def vectorized generator func def wrapper xargs xxkwargs return list generator_func xargs xxkwargs return functools update_wrapper wrapper generator func Our function then becomes vectorized def find answers while True ans look for next answer if ans is None break yield ans 7 2 7 A plugin registration system This is a class decorator which doesn t modify the class but just puts it in a global registry It falls into the category of decorators returning the original object class WordProcessor object PLUGINS def process self text for plugin an selt PLUGINS text plugin cleanup text return text classmethod det pliginicls plugin Cis PLUGINS append plugin QWordProcessor plugin class CleanMdashesExtension object
237. int anran D qu 07 DT o TL Er bes plis por dh we holds Oe lie ia al HOU Oss 20 COs Oe Ten gt gt gt Opening can also smooth corners gt gt gt ndimage binary_opening a astype np int array 0 07 07 07 Wi Os UO abr 205 Wie Oe dier ah cubus Ore RHODE de 20 OU COO Oe DE GOES Application remove noise gt gt gt square np zeros 32 32 gt gt Square Vso dues 1 gt gt gt np random seed 2 po x y 32enp random random 2 20 saseyoe np sine gt gt gt sgu uarelx yl 1 gt gt gt open_square ndimage binary_opening square gt gt gt eroded_square ndimage binary_erosion square gt gt gt reconstruction ndimage binary propagation eroded square mask square Closing dilation erosion Many other mathematical morphology operations hit and miss transform tophat etc 12 5 Feature extraction 12 5 1 Edge detection Synthetic data gt gt gt Ml Mo 2eros 256 256 gt gt gt im 64 64 64 64 1 SS gt gt gt im ndimage rotate im 15 mode constant ndrmage gaussran trlter im 9 gt gt gt im Use a gradient operator Sobel to find high intensity variations 12 5 Feature extraction 240 gt gt gt gt gt gt gt gt gt Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 sx ndimage sobel im axis 0 mode constant Sy ndimage sobel im axis 1 mode
238. into k clusters assigning each observation to a cluster so as to minimize the distance of that observation in n dimensional space to the cluster s mean the means are then recomputed This operation is run iteratively until the clusters converge for a maximum for max_iter rounds An alternative implementation of k means is available in SciPy s cluster package The scikit learn implementation differs from that by offering an object API and several additional features including smart initial ization gt gt gt from sklearn import cluster datasets gt gt gt iris datasets load_iris gt gt gt k_means cluster KMeans k 3 gt gt gt k_means fit iris data KMeans copy x True init k means tt k 3 gt gt gt print k means labels 10 ERE ke IEEE uw dO Ore 2 E gt gt gt Prine use5s 5 5oesl 10 105 Or 0 306 O ay Gh il OA eas s we 2a e e ee o te der o Virginica ar Versicolour Petal length Petal length Petal length Ground truth K means 3 clusters K means 8 clusters 19 3 Clustering grouping observations together 342 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Application to Image Compression Clustering can be seen as a way of choosing a small number of observations from the information For instance this can be used to posterize an image conversion of a continuous gradation of tone to several regions of fewer tones gt gt gt fro
239. ir reservoir inflows inflows_ts releases releases ts view configure_traits Edit properties Name Project A Plot Editar stock c ob nm o mo te el ete ERES Lee ee Ee Ine D Ca na Bus n 17 4 References ETS repositories http github com enthought 17 4 References 322 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Traits manual http github enthought com traits traits_user_manual index html e Traits UI manual http github enthought com traitsui traitsui_user_manual index html e Mailing list enthought dev enthought com 17 4 References 323 CHAPTER 18 3D plotting with Mayavi author Ga l Varoquaux Tip Mayavi is an interactive 3D plotting package matplotlib can also do simple 3D plotting but Mayavi relies on a more powerful engine VTK and is more suited to displaying large or complex data Chapters contents Mlab the scripting interface page 324 3D plotting functions page 325 Points page 325 Lines page 325 Elevation surface page 325 Arbitrary regular mesh page 326 Volumetric data page 326 Figures and decorations page 327 Figure management page 327 Changing plot properties page 327 Decorations page 329 Interactive work page 330 The pipeline dialog page 330 The script recording button page 331 Slicing and dicing data sources modules and filters page 331 An example inspe
240. is the autogenerated pure python module 2 Compile the cos module wrap cintothe cos module so Luckily distutils knows how to handle SWIG interface files so that our setup py is simply from distutils core import setup Extension 14 4 SWIG 272 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 setup ext_modules Extension _cos_module sources teos mod le c cos module NN cd advanced interfacing_with_c swig a irc cos module c cos module h cos module i setup py python setup py build ext inplace running build ext building cos module extension Swigdging cos module i to cos module wrap c gwig python o cos module wrap c cos module t creating build creat ing DUild cemp linux x36_64 2 7 gee pehread nO or e aalan O2 DEBUG o Enr DS Werrder eroreotypes fPIC Gee tim ccc Str l alaen c O2 DNDEBUG g inroep O wall wero prototypes fPIC gce pthread shared buta tomp linux x20 C1 2 T cos module o Du uilad temp linu x20 64 2 7 cos_mod S s build cos module c cos module h cos module i cos module py cos module so cos module wrap We can now load and execute the cos module as we have done in the previous examples In 1 import cos module In 2 cos module Type module String Form module cos module from cos module py gt File home esc git working scipy lecture notes advanced interfacing with c swig cos module Docotrin
241. it convert it to CSR format and solve A x b for x and solve a linear system with a direct solver import numpy as np import scipy sparse as sps from matplotlib import pyplot as plt from scipy sparse linalg dsolve import linsolve rand np random rand mtx sps lil matrix 1000 1000 dtype np float64 mex TOP SOUL and d uos 1003200 sms 00 mtx setdiag rand 1000 ud uc Ius plt spy mtx marker markersize 2 plit show mtx mtx tocsr canc 00 linsolve spsolve mex rhs print rezidual no linalownermimcx x rhs e examples direct_solve py 11 3 2 Iterative Solvers the isolve module contains the following solvers bicg BIConjugate Gradient bicgstab BIConjugate Gradient STABilized cg Conjugate Gradient symmetric positive definite matrices only 11 3 Linear System Solvers 226 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 cgs Conjugate Gradient Squared gmres Generalized Minimal RESidual minres MINimum RESidual qmr Quasi Minimal Residual Common Parameters mandatory A sparse matrix dense matrix LinearOperator The N by N matrix of the linear system b array matrix Right hand side of the linear system Has shape N or N 1 optional x0 array matrix Starting guess for the solution tol float Relative tolerance to achieve before terminating maxiter integer Maximum number of iterations
242. jUsers courns sre scipyZ20097 sc1py 2009 9 033 17 S 01 6e inmdex rst swo Users Courms srcy scipyZ009 scipy 2009 cuLOrial source view array Py SWP USers coUrns src scipy2009 scipy 2009 _ tutorials source basic types rst J Users coUmns sxrc Sscipy20097scipy 2009 cuterial source cont py Users cCohurnS Src Scipy20007 scipy 2005 ruborial source cont rol flow rot 2 7 Standard Library 37 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Environment variables In 9 import os In 11 osvenviron keys Out ls 4 oe AISISUEID IDIE S TERM PROGRAM VERSION CESIERNMODURBOABIBMSAZ USER HOME PATH ES SHELL EDITOR WORKON HOME PY THONPAT EH gt In 12 os environ PYTHONPATH Ome les 5 Users Cournc src utils Users courns to nmbceolse Users cburns local lib python2 5 site packages usr local lib python2 5 site packages Library Frameworks Python framework Versions 2 5 lib python2 5 In 16 os getenv PYTHONPATH Cur loly 87Users cburns stc utils Users Cours scc mbcoode Users cburns local lib python2 5 site packages usr local lib python2 5 site packages Library Frameworks Python framework Versions 2 5 lib python2 2 7 2 shutil high level file operations The shutil provides useful file operations shutil rmtree Recursively delete a directory tree shutil move Recursively move a file
243. l 0 10 using 5 5 Optimization and fit scipy optimize 110 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 scipy optimize fminbound oo omin local Opeinze hmimoound amp Oy T0 gt gt gt xmin_local mcos db Note Finding minima of function is discussed in more details in the advanced chapter Mathematical optimiza tion finding minima of functions page 247 Finding the roots of a scalar function To find a root ie a point where f x 0 of the function f above we can use for example Scipy optimize fsolve gt gt gt root Optimize fsolve f 1 T OO initial guess is d gt 22 KOOL cere ev ie sy Note that only one root is found Inspecting the plot of reveals that there is a second root around 2 5 We find the exact value of it by adjusting our initial guess gt gt gt FOOLS optimrze tsolve t 2 5 o gt ot array UO Curve fitting Suppose we have data sampled from f with some noise gt gt gt xdata np linspace 10 10 num 20 gt gt gt ydata f xdata np random randn xdata size Now if we know the functional form of the function from which the samples were drawn x 2 sin x in this case but not the amplitudes of the terms we can find those by least squares curve fitting First we have to define the function to fit gt gt gt def f2 x a b return 334x442 t Dwnpusndgts Then we can use scipy optimize curve fit to find a and b gt gt
244. l fl J odadbae o Jo Jo over this volume with the mean The exact result is In 2 i x 0 1931 what is your relative error Hints use elementwise operations and broadcasting You can make np ogrid give a number of points in given range with np ogrid 0 1 20j 3 5 Some exercises T7 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Reminder Python functions def f a b c return some_result Solution Python source file 3 5 5 Mandelbrot set 2 0 1 5 1 0 0 5 0 0 0 5 1 0 Write a script that computes the Mandelbrot fractal The Mandelbrot iteration N max 50 some_threshold 50 C x Lary for j in xrange N max uc SZ pss Point x y belongs to the Mandelbrot set if c lt some threshold Do this computation by 1 Construct a grid of c x 1j y values in range 2 1 x 1 5 1 5 2 Do the iteration 3 Form the 2 d boolean mask indicating which points are in the set 4 Save the result to an image with gt gt gt import matplotlib pyplot as plt eee OLE amehow mask Tl extent 27 by Debe UU lt matplotlib image AxesImage object at gt 3 5 Some exercises 78 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt plt gray 29 Ple saverig mande loro pig Solution Python source file 3 5 6 Markov chain Pii 2 Pj J Markov chain transition matrix P and probability distribution on the states p 1
245. lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt y as strided x shape 5 5 strides 5 5 5 5 x itemsize M 545 1 xx itemsize gt gt gt s2 y sum CPU cache effects Memory layout can affect performance In Iil x np zeros 20000 7 In 2 y npo 2zeross 200008677 ils 261 In 3 x shape y shape 200005 20000 In 4 timeit x sum 100000 loops best or 5 0 190 ms per loop In 5 cimeit y sum 100000 loops best of 3 2534 ms per loop In Te x strides sstrudes SG kp 15365 Smaller strides are faster cache block size CPU pulls data from main memory to its cache in blocks If many array items consecutively operated on fit in a single block small stride gt fewer transfers needed gt faster See also numexpr is designed to mitigate cache effects in array computing Example inplace operations caveat emptor e Sometimes gt gt gt a b is not the same as gt gt gt a b copy 8 1 Life of ndarray 172 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt x np array l1 gt gt gt X x transpose gt gt gt x pow Upsarray iil 21 Ese gt gt ee yu cop gt gt gt y arca ll d ss deas OD e xandx transpose share data e x x transpose modifies the data element by element e because x and x t ranspose have different striding
246. les associe san my emisor amne for j in range 2 N max is prime 2 j j False e Skim through help np nonzero and print the prime numbers Follow up Move the above code into a script file named prime sieve py Run it to check it works Use the optimization suggested in the sieve of Eratosthenes Skip j which are already known to not be primes 2 The first number to cross out is j 3 1 10 Fancy indexing Tip Numpy arrays can be indexed with slices but also with boolean or integer arrays masks This method is called fancy indexing It creates copies not views Using boolean masks gt gt gt np random seed 3 gt gt gt a np random random_integers 0 20 15 gt gt gt a array CD S SR Uy Ox S SU cO 20 dX Do Su Ib 1 a gt gt gt a Q0 array False True False True False False False True False True True False True False False dtype bool gt gt gt mask a 3 0 3 1 The Numpy array object 53 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt extract from a a mask or afas3 0 gt gt gt extracte Erom a extract a sub array with the mask abiay 3 OF on 65 OF EIN Indexing with a mask can be very useful to assign a new value to a sub array Indexing with an array of integers gt gt gt a np arange 0 100 10 gt gt gt a array i 0 10 20 307 sov m XS 907 In
247. line extract vector norm field contours 0 1xBmax 0 4xBmax opacity 0 5 Excercice Using the mlab pipeline interface generate a complete visualization with iso contours of the field magni tude and a vector cut plane click on the figure for a solution 18 4 Animating the data Tip To make movies or interactive application you may want to change the data represented on a given visualization 18 4 Animating the data 333 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 If you have built a visualization using the ml ab plotting functions or the m1ab pipeline function we can update the data by assigning new values to the mlab_source attributes Mf Ns We EA NO OC o oe LOO p oe oe DE a EON scalars Mp sinix ws 7 x y m iso mliab contoursd scatars transparene l rue Contours 0 5 for 1i in range ib 20 Scalers pas imi ue ia e sede x e ye imag iso mlab source scalars scalars See also More details in the Mayavi documentation Event loops For the interaction with the user for instance changing the view with the mouse Mayavi needs some time to process these events The for loop above prevents this The Mayavi documentation details a workaround 18 5 Making interactive dialogs It is very simple to make interactive dialogs with Mayavi using the Traits library see the dedicated chapter Traits building interactive dialogs page 305 18 5 1 A simple
248. livered by the turbine Mw class Reservoir HasTraits name Str max storage Float le6 desc Maximal storage hm3 max release Float 10 desc Maximal release m3 s head Float 10 desc Hydraulic head m efficiency Range 0 1 turbine Instance Turbine installed capacity PrototypedFrom turbine power if name main turbine Turbine turbine type typel power 5 0 reservoir Reservoir name Project A max_storage 30 max release 100 0 head 60 efficiency 0 6 turbrne turbine print installed capacity is initialised with turbine power print reservoir installed_capacity print oS o 15 print updating the turbine power updates the installed capacity turbine power 10 print reservoir installed capacity prine s 5 print setting the installed capacity breaks the link between turbine power print and the installed capacity trait reservoir installed_capacity 8 print turbine power reservoir installed capacity 17 3 6 Notification Traits implements a Listener pattern For each trait a list of static and dynamic listeners can be fed with callbacks When the trait does change all the listeners are called Static listeners are defined using the XXX changed magic methods from traits api import HasTraits Instance DelegatesTo Float Range from reservoir import Reservoir class ReservoirState HasTraits Keep
249. ll trees to represent the samples it is trained on KNN k nearest neighbors classification example gt gt gt Create and fit a nearest neighbor classifier gt gt gt from sklearn import neighbors gt gt gt knn neighbors KNeighborsClassifier Pon rit Irig data Ames earges KNewghborsClassctrer s s socedqembnepresdeux idu quem x S Wea array 0 Training set and testing set When experimenting with learning algorithms it is important not to test the prediction of an estimator on the data used to fit the estimator Indeed with the KNN estimator we would always get perfect prediction on the training set gt gt gt perm np random permutation iris target size gt gt gt iris data iris data perm gt gt gt iris target iris target perm gt gt gt Imp heme ccu ole uc aues vicine dO KNeighborsClassifier poo enn Score iris daca lV002 arro star et prp OS ISI as Bonus question why did we use a random permutation 19 2 2 Support vector machines SVMs for classification Linear Support Vector Machines SVMs try to construct a hyperplane maximizing the margin between the two classes It selects a subset of the input called the support vectors which are the observations closest to the separating hyperplane 19 2 Classification 340 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt from sklearn import svm gt gt gt svc
250. lse If b is a dictionary this tests that a is a key of b 2 3 Control Flow 20 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 2 3 5 Advanced iteration Iterate over any sequence You can iterate over any sequence string list keys in a dictionary lines in a file gt gt gt vowels aeiouy gt gt gt for i in powerful if i in vowels print i gt gt gt message Hello how are your gt gt gt message split returns a list esposte NOW n csset 5 fesso gt gt gt for word in message split print word Hello how ake you Tip Few languages in particular languages for scientific computing allow to loop over anything but inte gers indices With Python it is possible to loop exactly over the objects of interest without bothering with indices you often don t care about This feature can often be used to make code more readable Warning Not safe to modify the sequence you are iterating over Keeping track of enumeration number Common task is to iterate over a sequence while keeping track of the item number Could use while loop with a counter as above Or a for loop gt gt gt words cool powerful readable gt gt gt for i in range 0 len words print i words cool 1 powerful 2 readable But Python provides enumerate keyword for this gt gt gt for index item in enumerate words print index item 0 cool 1 powe
251. luded in Canopy and Anaconda 0 7 release packaged in Ubuntu gt gt gt import skimage gt gt gt from skimage import data filter most functions are in subpackages Most scikit image functions take NumPy ndarrays as arguments gt gt gt camera data camera gt gt gt camera dtype dtype uinte gt gt gt filtered camera filter median filter camera gt gt gt type filtered camera tvpe numpy ndarray gt Other Python packages are available for image processing and work with NumPy arrays e scipy ndimage for nd arrays no image magics Basic filtering mathematical morphology regions properties e Mahotas Also powerful image processing libraries have Python bindings e OpenCV computer vision TK 3D images and registration and many others 16 1 Introduction and concepts 292 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 but they are less Pythonic and NumPy friendly Warning The Image wrapper class around np ndarray skimage is meant to work natively with NumPy arrays and most skimage functions return NumPy arrays Some functions of the dat a submodule return instead an instance of the Image class which is just a wrapper class around NumPy ndarray gt gt gt camera data camera gt gt gt camera mage Eur ES EO cain oe hoe ASG MERIT MEDIUM ase diei En ves bou les ES x cer phew pha cess T2 la diuo L26 sarde db DU LELI 20
252. lue 0 origin 0 brute force False DOSE I EROS Mulii dimensionel binary dilation with the given structure An output array can optionally be provided The origin parameter controls the placement of the filter If no structuring element is provided an element is generated with a squared connectivity equal to one The dilation operation is repeated iterations times If iterations is less than 1 the dilation is repeated until the result does not change anymore If a mask is given only those elements with a true value at the corresponding mask element are modified at each iteration 2 5 7 Good practices Use meaningful object names e Indentation no choice Tip Indenting is compulsory in Python Every command block following a colon bears an additional indentation level with respect to the previous line with a colon One must therefore indent after def f or while At the end of such logical blocks one decreases the indentation depth and re increases it if a new block is entered etc Strict respect of indentation is the price to pay for getting rid of or characters that delineate logical blocks in other languages Improper indentation leads to errors such as IndentationError unexpected indent test py line 2 2 5 Reusing code scripts and modules 33 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 All this indentation business can be a bit confusing in the beginning However with
253. m scipy import misc gt gt gt lena misc lena astype np float32 gt gt gt X lena reshape 1 1 We need an n sample n feature array gt gt gt k means cluster KMeans n clusters 5 gt gt gt k_means fit X KMeans gt gt gt values k means cluster centers squeeze gt gt gt labels k means labels gt gt gt lena compressed np choose labels values gt gt gt lena compressed shape lena shape The cloud of points spanned by the observations above is very flat in one direction so that one feature can almost be exactly computed using the 2 other PCA finds the directions in which the data is not flat and it can reduce the dimensionality of the data by projecting on a subspace gt gt gt from sklearn import decomposition gt gt gt pca decomposition PCA n components 2 19 4 Dimension Reduction with Principal Component Analysis 343 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 a PCa hi ETE TS ela PCA copy True n components 2 whiten False aoe X Pea trane torm iris data Now we can visualize the transformed iris dataset gt gt gt import pylab as pl eea A e e S A a E R cede cito CT ee matplort libi corlections e Collection ODJecE aC fa gt PCA is not just useful for visualization of high dimensional datasets It can also be used as a preprocessing step to help speed up supervised methods th
254. member the a object oriented notation and use tab completion or help str to search for new methods See also Python offers advanced possibilities for manipulating strings looking for patterns or formatting The interested reader is referred to _ http docs python org library stdtypes html string methods and http docs python org library string html new string formatting String substitution Oo gt gt gt An Integer c a loar 95 5 another strings 9 Lh OL string An integer 17 a float 0 100000 another string string gt gt gt a ues 1650 27 gt gt gt filename processing of dataset d txt i gt gt gt filename torocessing of dataset 102 txt Dictionaries Tip A dictionary is basically an efficient table that maps keys to values It is an unordered container gt gt gt tel 7 emmanuelle 5752 sebastian 5578 gt gt gt tell francis 595 gt gt gt tel i Sebastian 5575 francis gt 5915 emmanuelhte 57152 gt gt gt tel sebastian EIAS gt gt gt tel keys sebastian francis emmanuelle gt gt gt pel amp iwaluest eso Sd or NEST gt gt gt francis in tel True Tip It can be used to conveniently store and retrieve values associated with a name a string for a date a name etc See http docs python org tutorial datastructures html dictionaries for more information A dictionary can have keys resp val
255. mie cer o O 1 you can also calculate the limit at infinity imi tx xy 69 OO Loe hime ex so 15 2 Algebraic manipulations 286 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 0 Soe limit ee xp 0 al 15 3 2 Differentiation You can differentiate any SymPy expression using diff func var Examples SoS di tt sums 9 Cos x gt gt gt Adifi sini 2ex Z2reOos 27x gt gt gt diff tan x xX 1 tan x 2 You can check that it is correct by gt gt gt limit tan Gey tan 2 v y 0 L ean Go Higher derivatives can be calculated using the diff func var n method gt gt gt duifttf sumt2x x 1 2 cOS 2 x pce EE Sm oo 2 xum 24x sec Jili i Sin 2 xi So 2 9E COS 21 15 3 3 Series expansion SymPy also knows how to compute the Taylor series of an expression at a point Use series expr var gt gt gt series cos x xX 1 x 2 2 x x4 24 O xxx6 gt gt gt series l1 cos x x 1 x 2 2 5xxxx4 24 O xxx6 15 3 4 Exercises 1 Calculate lim z gt 0 sin x x 2 Calulate the derivative of log x for x 15 3 5 Integration SymPy has support for indefinite and definite integration of transcendental elementary and special functions via integrate facility which uses powerful extended Risch Norman algorithm and some heuristics and pattern matching You can integrate elementary functions g
256. n n vim Use the pyflakes vim plugin 1 download the zip file from http www vim org scripts script php script_id 244 2 extract the files in vim ftplugin python 3 make sure your vimrc has filetype plugin indent on IB self log emissionprob obs T Alternatively use the syntastic plugin This can be configured to use 1ake8 too and also handles on the fly checking for many other languages data load da SEP eS HOP p T g t data NN debug file pu Ol at least two spaces before inline comment In emacs Use the flymake mode with pyflakes documented on http www plope com Members chrism flymake mode add the following to your emacs file when load flymake t defun flymake pyflakes init lets temp file flymake init create temp buffer copy flymake create temp inplace local file file relative name 9 1 Avoiding bugs 194 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 temp file file name directory buffer file name Lisi py tlakes dst local rley add to list flymake allowed file name masks rM cov tsm spicec s INE tadd hook rrnd r te hook tiwmake rroderrte hook 9 2 Debugging workflow I you do have a non trivial bug this is when debugging strategies kick in There is no silver bullet Yet strategies help For debugging a given problem the favorable situation is when the problem is isolated in a small number o
257. n Advanced topics Advanced Python Constructs 7 1 Iterators generator expressions and generators 1 sosoo a e e e ee DCS x cea xoxo xo mo ERE 303 297m RES ko OIC KI mana eS S noz ee A XR OE WE c NOR OA OE S eee ESOS m AR Ce SOR d Advanced Numpy BJ Wise Ori Lu e eee ee eee ORUROR BONO Ree EERE eee P d EUR S mh AUMIVersalTMMCHONS vos Boe Ro 0 wd XE XO 9 7e RORGE EX Zoe X 9 Regani 5 9 _ Interoperability features daos okok 642448468 eb bi bw REOR EUR RoROEUA ROB HERES EES 8 4 Array siblings chararray maskedarray matrix 5 SUMMA 15 4 ee ee boo be beee Ce oe 1 99 dws 4 Se 3 8 6 Contributing to Numpy Scipy lt 2 6 6 885 44428008844 ee 4444548884 ob eX Debugging code 91 Avoiding DUS 15s ox 9m YR di ee Eee Ree EE db uk d eh COR eC AEE Wm oH 9 2 Debugging workflow 2 25445 444 e OX ood woo ROS DER MERE HEERE O9 RR 9 25 Usmethe Pytnondcbusecr 22 3 xov wo 3 X RE Pose x9 ERE u GEE SEER EEE HHH 9 4 Debugging segmentation faults using gdb oa a e a a e Optimizing code 10 1 Optimization workflow uou owopm kx RU OR O RO x eG ORO RO SENDEN ER OE ROR eR ow EGG 10 2 Profiling Python code 2x ox4 9x xEXEGEEeaxREOSEGS 9 9334 0 X 24 10 3 Making code gO Taster ae o4 x ER XO OX OE ES HEE EERE EEE ER 49 X OHS 104 Writing faster numerical code 3 2249 xX 999 x X 9E SCR OR ee RR Ry x doen Sparse Matrices in SciPy DLE OMRON 3426 4 6456 RESesESSxSS 43
258. n of unsized object This also happens with long arguments and so np random permutation X shape 0 where X is an array fails on 64 bit windows where shape is a tuple of longs It would be great if it could cast to integer or at least raise a proper error for non integer types I m using Nunmpy 124 1 buile from ene oficial tarball om Windows 64 with visual ctudia 0007 on Pyemon org osse Python 0 What are you trying to do 1 Small code snippet reproducing the bug if possible What actually happens What you d expect 2 Platform Windows Linux OSX 32 64 bits x86 PPC 3 Version of Numpy Scipy gt gt print Mp version 2 Check that the following is what you expect gt gt gt print np tive fient In case you have old broken Numpy installations lying around If unsure try to remove existing Numpy installations and reinstall 8 6 3 Contributing to documentation 1 Documentation editor e http docs scipy org numpy Registration Register an account Subscribe to scipy dev mailing list subscribers only 8 6 Contributing to Numpy Scipy 189 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Problem with mailing lists you get mail But you can turn mail delivery off change your subscription options at the bottom of http mail scipy org mailman listinfo scipy dev Send a mail scipy dev mailing list ask for activation To SCipy ce
259. n create your own Use the functions 1en shape and ndim on some of those arrays and observe their output 3 1 5 Functions for creating arrays In practice we rarely enter items one by one Evenly spaced gt gt gt a np arange 10 F O n 1 gt a eue I My 2 ser uu OG 399 s Vee SONT gt gt gt b np arange 1 9 2 start end exclusive step gt gt gt b array Ghle 2258 T or by number of points gt gt gt C np linsopace 0 1 6 start end num points gt gt gt C erase a Hosp dus UR Olas ale by gt gt gt d np linspace 0 1 5 endpoint False gt gt gt d array Ul c Wee Wade OCG 0e 3 1 The Numpy array object 45 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Common arrays gt gt gt a np ones 3 3 reminder 3 3 is a tuple gt gt gt a abbay rd rer Nen e Ser sr Xe iue ux COSS gt gt gt b np zeros 2 2 gt gt gt b arr y tll Gar Cally EO JUI gt gt gt c np eye 3 gt gt gt C eue ia Dess Qo 3954 Nem Ole Waco iT bt ID aon d Mp drag mp sarray Il 3 A1 gt gt gt d arcasii 0 07 Oily POTA We a COTOS TO O Or 20 an e np random random numbers Mersenne Twister PRNG gt gt gt a np random rand 4 m ungdcormelm eu gt gt gt a cse MEDIE OI EI DNI DU rM EET ndum gt gt gt b np random randn 4 Gaussian gt gt gt b array l Oro TMA oIa eU 11
260. n file py import sys print sys argv v python file py test arguments rfile py test arguments 2 5 2 Importing objects from modules In 1 import os In 2 os CUE Zi module os from u usr ib python2s6 05 pye in es 4 os iisiairnt t Oure 3 g V eoni Dy pasire Cy Pes ur Sir CONTO Elow CSC 1 TUCL LONS o rst Oy enon language Tst Sew ing rst Cuqdo qose exceptTOnsrst end due TASE index rst And also In 4 from os import listdir Importing shorthands 2 5 Reusing code scripts and modules 28 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In 5 import numpy as np Warning from os import This is called the star import and please Use it with caution Makes the code harder to read and understand where do symbols come from Makes it impossible to guess the functionality by the context and the name hint os name is the name of the OS and to profit usefully from tab completion e Restricts the variable names you can use os name might override name or vise versa Creates possible name clashes between modules Makes the code impossible to statically check for undefined symbols Tip Modules are thus a good way to organize code in a hierarchical way Actually all the scientific computing tools we are going to use are modules gt gt gt import numpy as np data arrays o Np linspace 0 LO 6 alia O goes ab Ga
261. n index gt gt gt for i in range 4 print 1 GU m3 d c But most often it is more readable to iterate over values gt gt gt for word in cool powerful readable f P print Python is 98 word Pychonm 1s cool Python is powerful Python is readable 2 3 3 While break continue Typical C style while loop Mandelbrot problem gt gt gt z 14 1j gt gt gt while abs z lt 100 el 2 3 Control Flow 19 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt Z 1341352 More advanced features break out of enclosing for while loop gt gt gt Ww LT gt gt gt while abs z lt 100 if z imag break Z z x2 1 continue the next iteration of a loop gt gt gt a 1 0 2 4 gt gt gt for element in a if element continue print 1 element Oa Is CO 3 c 2 3 4 Conditional Expressions if lt OBJECT gt Evaluates to False e any number equal to zero 0 0 0 0 0j an empty container list tuple set dictionary e False None Evaluates to True everything else a b Tests equality with logics gt gt gt l True a is b Tests identity both sides are the same object gt gt gt as l False gt gt gt a e n gt gt gt p gt gt gt a is D True a in b For any collection b b contains a gt gt gt b 1 2 3 gt gt gt 2 in b True gt gt gt 5 in b Fa
262. nctions 2m module 27 static PyMethodDef CosMethods cos func cos func METH VARARGS evaluate the cosine NOLL NOMI O NUNN LE Ye moule ru thea tee con uu PyMOD IND TT FUNC initcos module void 1 void Py InitModule cos module CosMethods As you can see there is much boilerplate both to massage the arguments and return types into place and for the module initialisation Although some of this is amortised as the extension grows the boilerplate required for each function s remains The standard python build system distutils supports compiling C extensions from a setup py which is rather convenient from distutils core import setup Extension T derine the Sk tens Lon module cos module Extension cos_module sources cos module c run the setup setup ext modules cos module This can be compiled cd advanced interfacing with c python c api SES cos module c setup py python setup py build ext inplace running build ext building cos module extension creating build creating build temp 1linux x86_64 2 7 gce pe tread mossa egg cc oA DEBUG Suo Os weri t prototypes fPIC 142 Python C Api T 265 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gcc pthread shared build temp linux x806 64 2 7 cos module o L home esc anaconda lib lpython2 Sai build cos module c cos_module sc setup py e build_ext is to build extension modules
263. nd 2 427 2 gt gt gt x sum axis 2 0 1 1 14764 ne KO De sed Stm LTA VOA e Other reductions works the same way and take axis Statistics gt gt gt x Nopwariray Il xs e ay 22 o ee xb ID gt gt gt x mean Tu gt gt gt np median x Le gt gt gt np median y axis 1 last axis array 2 l poc Ka SCO full population standard dev 0 3291569759989 1995 Extrema gt gt x mp ly 23 2 gt gt gt x min 3 2 Numerical operations on arrays 58 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt x max gt gt gt xiargmin index of minimum 0 poc x dargmax index of maximum 1 Logical operations gt gt gt np all True True False False gt gt gt np any True True False True Note Can be used for array comparisons gt gt gt a np zeros 100 100 gt gt gt np any a 0 False gt gt gt np all a a True 2 g Parray Lb I2 gt gt gt po Movarray I2 A35 21 gt gt gt C mo arrdv 6 4 4 5 Soe a lt oo x ec nell True and many more best to learn as you go Exercise Reductions Given there is a sum what other function might you expect to see What is the difference between sum and cumsum 3 2 Numerical operations on arrays 59 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Worked Example data statistics
264. ndarray Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 cp gt gt gt str x data IYO x00 x 02 Ve 00 sco 3x00 204 eg Oo 00006 00 0 7 00 08 vos DR Nose DD Need to jump 6 bytes to find the next row Need to jump 2 bytes to find the next column gt gt gt y np array x order F gt gt gt y strides 27 gt gt gt str y data ENO R OO 20 45 00 0 SOO OZ 00 0S 0 95 40 95 00 0S 500 06 00 ce O Need to jump 2 bytes to find the next row Need to jump 6 bytes to find the next column e Similarly to higher dimensions C last dimensions vary fastest smaller strides F first dimensions vary fastest shape di ds dn strides 51 S2 Sn se Gay teen x itemsize 8j dido dj X itemsize Note Now we can understand the behavior of view gt gt gt y mpoarbrav llt 3 127 4l dtype np uint transpose gt gt gt x y copy Transposition does not affect the memory layout of the data only strides 2 X Strides 2 1 gt gt gt y strides pz gt gt gt str x data 2540115930195 03 x04 gt gt gt SIM 4 48 203 x02 04 the results are different when interpreted as 2 of int16 e copy creates new arrays in the C order by default Slicing with integers e Everything can be represented by changing only shape strides and possibly adjusting the data pointer Never makes copies of the data s x o nprarray l
265. ndex Click on any image to see full size image and source code l ear 0 m ATIP v amp e Go fni 7 p Boos 4nd nn tam ae The can boy ow cdi SEM AE Enter search terms or a module HV class or function name is a LT fhm oe KY ee D n VA oon M amp matplotlib S harter Settee Profiles Acres Fest Semen e o some other _ ZI Tt H S e Mayavi s website http code enthought com projects mayavi docs development html mayavi also has a very nice gallery of examples http code enthought com projects mayavi docs development html mayavi auto examples html in which one can browse for different visualization solutions 138 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Example gallery Mayavi v3 3 1 documentation previous next index Mlab functions gallery These are the examples of the mlab plotting functions They are copied out here for convenience Please refer to the corresponding section of the user guide for more information 3D Plotting functions for numpy arrays Table Of Contents plot3d points3d imshow Example gallery Miab functions gallery Advanced mlab examples Interactive examples Advanced visualization examples Misc examples Previous topic surf Miscellaneous Next topic Boy example This Page Show Source Quick search barchart triangular
266. ne 1 in mocule gt StoplIteration When used in a loop St op Iteration is swallowed and causes the loop to finish But with explicit invocation we can see that once the iterator is exhausted accessing it raises an exception Using the for in loop also uses the __iter__ method This allows us to transparently start the iteration over a sequence But if we already have the iterator we want to be able to use it in an for loop in the same way In order to achieve this iterators in addition to next are also required to have a method called iter which returns the iterator self Support for iteration 1s pervasive in Python all sequences and unordered containers in the standard library allow this The concept is also stretched to other things e g file objects support iteration over lines gt gt gt f open etc fstab gt gt gt f is f Trter True The file is an iterator itself and its ___iter_ method doesn t create a separate object only a single thread of sequential access is allowed 7 1 lterators generator expressions and generators 144 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 7 1 2 Generator expressions A second way in which iterator objects are created is through generator expressions the basis for list compre hensions To increase clarity a generator expression must always be enclosed in parentheses or an expression If round parentheses are used then a generator iterator is cr
267. neral and efficient way to find a minimum for this function is to conduct a gradient descent starting from a given initial point The BFGS algorithm is a good way of doing this o gt bm ze min bros i 0 Optimization terminated successfully Current function value 7 945023 Dterdgbdg onse S Function evaluations 24 Gradient evaluations 8 arbpay p 212906440091 A possible issue with this approach is that if the function has local minima the algorithm may find these local minima instead of the global minimum depending on the initial point gt gt gt optimize fmin bfgs f 3 disp 0 array 99957460669 9 If we don t know the neighborhood of the global minimum to choose the initial point we need to resort to costlier global optimization To find the global minimum the simplest algorithm is the brute force algorithm in which the function is evaluated on each point of a given grid gt gt gt grid 10 dO 0 1 gt gt gt xmin global optimize brute f grid o gt xmin global abray l S0G4 11 13 For larger grid sizes scipy optimize brute becomes quite slow scipy optimize anneal provides an alternative using simulated annealing More efficient algorithms for different classes of global opti mization problems exist but this is out of the scope of scipy Some useful packages for global optimization are OpenOpt IPOPT PyGMO and PyEvolve To find the local minimum lets constraint the variable to the interva
268. ng 133 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 140000 120000 100000 80000 60000 40000 20000 o 50 100 150 200 250 4 Using the histogram of the filtered image determine thresholds that allow to define masks for sand pixels glass pixels and bubble pixels Other option homework write a function that determines automatically the thresholds from the minima of the histogram gt gt gt void filtdat lt 50 gt gt gt sand np logical and filtdat gt 30 filtdat ed gt gt gt glass filtdat gt 114 5 Display an image in which the three phases are colored with three different colors gt gt gt phases VOLO saSt ype Npainmt 2Zeoglass astype Np int 34sSaendsast ype Np and 5 11 Summary exercises on scientific computing 134 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 6 Use mathematical morphology to clean the different phases gt gt gt sand_op ndimage binary_opening sand iterations 2 7 Attribute labels to all bubbles and sand grains and remove from the sand mask grains that are smaller than 10 pixels To do so use ndimage sumor np bincount to compute the grain sizes gt gt gt sand labels sand nb ndimage label sand op gt gt gt sand areas np array ndimage sum sand op sand labels np arange sand labels max 41 gt gt gt mask sand areas gt 100 gt gt gt remove small sand mask sand label
269. ng matlab files gt gt gt from scipy import io as spio gt gt gt a np ones 3 3 gt gt gt spio savemat file mat a a savemat expects a dictionary gt gt gt data spuroloadmact rilemac struct es record True gt gt gt data a arcar ii 1s y d ads E Wc der dale IP sro PEE Reading images gt gt gt from scipy import misc gt gt gt misc imread fname png ps F MOtpTOLISD also hasca similar fsncoson gt gt gt import matplotlib pyplot as plt gt gt gt plt imread tname pnog See also e Load text files numpy loadtxt numpy savetxt e Clever loading of text csv files numpy genfromtxt numpy recfromcsv e Fast and efficient but numpy specific binary format numpy save numpy load 5 2 Special functions scipy special Special functions are transcendental functions The docstring of the scipy special module is well written so we won t list all functions here Frequently used ones are 5 1 File input output scipy io 103 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Bessel function such as scipy special jn nth integer order Bessel function Elliptic function scipy special ellipj for the Jacobian elliptic function Gamma function scipy special gamma also note scipy special gammaln which will give the log of Gamma to a higher numerical precision Erf the area under a Gaussian curve scipy spec
270. ning a new software for each new problem 1 1 3 Existing solutions Which solutions do scientists use to work Compiled languages C C Fortran etc Advantages Very fast Very optimized compilers For heavy computations it s difficult to outperform these lan guages Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Some very optimized scientific libraries have been written for these languages Example BLAS vector matrix operations e Drawbacks Painful usage no interactivity during development mandatory compilation steps verbose syntax amp etc manual memory management tricky in C These are difficult languages for non com puter scientists Scripting languages Matlab e Advantages Very rich collection of libraries with numerous algorithms for many different domains Fast execution because these libraries are often written in a compiled language Pleasant development environment comprehensive and well organized help integrated editor etc Commercial support is available Drawbacks Base language is quite poor and can become restrictive for advanced users Not free Other scripting languages Scilab Octave Igor R IDL etc e Advantages Open source free or at least cheaper than Matlab Some features can be very advanced statistics in R figures in Igor etc Drawbacks Fewer available algorithms than in Matlab
271. nnotate some points page 87 Devil is in the details page 88 Figures Subplots Axes and Ticks page 88 Figures page 89 Subplots page 89 Axes page 89 Ticks page 90 Other Types of Plots examples and exercises page 90 Regular Plots page 92 Scatter Plots page 92 Bar Plots page 93 Contour Plots page 93 Imshow page 94 Pie Charts page 94 Quiver Plots page 95 Grids page 95 Multi Plots page 95 Polar Axis page 96 3D Plots page 96 Text page 97 Beyond this tutorial page 97 Tutorials page 97 Matplotlib documentation page 98 Code documentation page 98 Galleries page 99 Mailing lists page 99 Quick references page 99 Line properties page 99 Line styles page 100 Markers page 100 Colormaps page 100 4 1 Introduction Tip Matplotlib is probably the single most used Python package for 2D graphics It provides both a very quick way to visualize data from Python and publication quality figures in many formats We are going to explore matplotlib in interactive mode covering most common cases 4 1 Introduction 81 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 1 1 IPython and the pylab mode Tip Python is an enhanced interactive Python shell that has lots of interesting features including named in puts and outputs access to shell commands
272. np cos x 0 3xnp random rand 20 gt gt D Np polyldinp polyrit x Y S gt gt gt t np lxnspacet0 1 200 som a ye Coy put teh ematplotlsbslrmes LbcmNe2Dobgyect at 2 42 macploclitbs lines LineZD 0bject ab ze 1 3 1 2 1 1 1 0 0 9 0 8 0 6 0 0 2 0 4 0 6 0 8 1 0 See http docs scipy org doc numpy reference routines polynomials poly 1 d html for more 3 4 Advanced operations T1 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 More polynomials with more bases Numpy also has a more sophisticated polynomial interface which supports e g the Chebyshev basis 3r 2x7 1 gt gt gt p nospolynomial Polynomial l 2 3 7 coers in difrfarent order gt gt gt p 0 SO p popootsW gnome be E NDS cO gt gt gt p degree In general polynomials do not always expose order 2 Example using polynomials in Chebyshev basis for polynomials in range 1 1 gt gt gt x np linspace 1 1 2000 poc No cos x O02 s7np random cand 2000 gt gt gt p np polynomial Chebyshev fit x y 90 gt gt gt t np linspace l 1 200 ncc plteopuisbN o BEI macplot0tx5lrmeschusmne2Doobyect et e plite plott pote kF dw matplot ilib linces Line2D ODJEct at ea 1 0 0 5 0 0 0 5 1 0 The Chebyshev polynomials have some advantages in interpolation 34 Advanced operations 0000072 Python Scientific lecture notes
273. ns that are executed each time the script is called Instructions may be e g copied and pasted from the interpreter but take care to respect indentation rules The extension for Python files is py Write or copy and paste the following lines in a file called test py message Hello how are you for word in message split print word Tip Let us now execute the script interactively that is inside the Ipython interpreter This is maybe the most common use of scripts in scientific computing Note in Ipython the syntax to execute a script is run script py For example In 1 run test py Hello how are vou In 2 message Out 2 Hello how are you The script has been executed Moreover the variables defined in the script such as message are now available inside the interpeter s namespace Tip Other interpreters also offer the possibility to execute scripts e g execfile in the plain Python inter preter etc 2 5 Reusing code scripts and modules 27 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 It is also possible In order to execute this script as a standalone program by executing the script inside a shell terminal Linux Mac console or cmd Windows console For example if we are in the same directory as the test py file we can execute this in a console p DYENOM tese oy Hello how are you Tip Standalone scripts may also take command line arguments I
274. nt8 gt gt gt mtx 3504 sparse matrix Of type lt type numpy Lints with 0 stored elements blocksize 1x1 in Block Sparse Row format gt gt gt gt mtx todense meisme OOO Om 05 0 30 O Oy 07 Ol dtvpe inteo create empty BSR matrix with 3 2 block size gt gt gt mtx sparse bsr_matrix 3 4 blocksize 3 2 dtype np int8 gt gt gt mtx 9x4 Sparse matrix of type type numpy ntg with 0 stored elements blocksize 3x2 in Block Sparse Row format gt gt gt mtx todense memas Oe Ore NDS Wik Gy Ss rs OI L0 0 0 I dbypessmnte a bug create using data ij tuple with 1 1 block size like CSR boo COW 0o arcrcay wit 07 bp e 2 21 gt gt gt Coll np arry b x 25 0 Xs aan gt gt gt data np array 1 2 3 4 5 ue gt gt gt mtx sparse bsr_matrix data row col shape 3 3 gt gt gt mtx lt 3x3 sparse matrix of type tvpe numpy uvmEos4t gt with 6 stored elements blocksize 1x1 in Block Sparse Row format gt gt gt gt mtx todense Tete de qe ie E Gre oA a Evae cr gt gt gt mtx data acra TIT 1 TESI gt gt gt Mex indices array l0 27 27 Or l 221 5 di vpessimmbis2 gt gt gt MCX HO e array l0 2 ik Ole Ceype 1me3sZ e create using data indices indptr tuple with 2 2 block size gt gt gt qudptr np array 10 gt gt andices mpcarray 0 2 2 0 I 21 Z gt
275. nteraction Start ipython in 1 print Hello world Hello world Getting help by using the operator after an object Ta E23 print Type pun iken funcr Lon oF method Base Class lt type builtin function or method SCEN Horm pud ies TUNC meme Namespace Python Duirltin DOC Sekine print value sep end n file sys stdout Prints the values to a stream or to sys stdout by default Optional keyword arguments file a file like object stream defaults to the current sys stdout sep string inserted between values default a space end string appended after the last value default a newline 1 3 2 Elaboration of the algorithm in an editor Create a file my_file py in a text editor Under EPD Enthought Python Distribution you can use Scite available from the start menu Under Python x y you can use Spyder Under Ubuntu if you don t already have your favorite editor we would advise installing Stani s Python editor In the file add the following lines S Hello world print s Now you can run it in IPython and explore the resulting variables In bl 50D my ET Hello world In 2 s Out x le Hello world In 3 whos Variable Type Data Into From a script to functions While it is tempting to work only with scripts that is a file full of instructions following each other do plan to progressively evolve the script to a set of functions A script is not
276. numpy format inside the file examples sprog windspeeds npy Do not look at the source code for the plots until you have completed the exercise The first step will be to find the annual maxima by using numpy and plot them as a matplotlib bar figure e The second step will be to use the Gumbell distribution on cumulative probabilities p_i defined as 1log log p i for fitting a linear quantile function remember that you can define the degree of the 5 11 Summary exercises on scientific computing 125 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 1 0 0 8 o re o I Cumulative probability 0 2 Veg 32 98 m s 0 06 22 24 26 28 30 32 34 Annual wind speed maxima m s Figure 5 1 Solution Python source file 5 11 Summary exercises on scientific computing 126 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 30 Annual wind speed maxima m s Year Figure 5 2 Solution Python source file 5 11 Summary exercises on scientific computing 127 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 UnivariateSpline Plotting the annual maxima versus the Gumbell distribution should give you the following figure Gumbell cumulative probability Veg 34 23 m s K 20 25 30 35 40 45 Annual wind speed maxima m s Figure 5 3 Solution Python source file The last step will be to find 34 23 m s for the maximum wind speed occurring ev
277. o cum DES CONVERGENCE Note If you do not specify the gradient to the L BFGS solver you need to add approx_grad 1 13 2 4 Gradient less methods A shooting method the Powell algorithm Almost a gradient approach 13 2 A review of the different optimizers 255 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 An ill conditionned quadratic function Powell s method isn t too sensitive to local ill conditionning in low dimensions An ill conditionned very non quadratic function Simplex method the Nelder Mead The Nelder Mead algorithms is a generalization of dichotomy approaches to high dimensional spaces The al gorithm works by refining a simplex the generalization of intervals and triangles to high dimensional spaces to bracket the minimum Strong points it is robust to noise as it does not rely on computing gradients Thus it can work on functions that are not locally smooth such as experimental data points as long as they display a large scale bell shape behavior However it is slower than gradient based methods on smooth non noisy functions iterations function calls Error on f x e ejo 50 100 150 200 250 An ill conditionned non quadratic function iterations function calls Error on f x e PC 150 200 250 An ill conditionned very non quadratic function In scipy scipy optimize fmin implements the Nelder Mead approach gt gt gt def f x
278. o the Mandelbrot set Make ufunc called mandel zO c that computes z z0 for k in range iterations LZ Ae r C say 100 iterations or until z real 2 z imagx 2 gt 1000 Use it to determine which c are in the Mandelbrot set e Our function is a simple one so make use of the PyUFunc x helpers Write it in Cython See also mandel pyx mandelplot py Fix the parts marked by TODO Compile this tile by Cython 0 12 required because or the complex vars cython mandel pyx o hon Setup p Pull e c 7 eel try IE Ole viti an thls eia DOO o gt gt gt import mandel gt gt gt mandel mandel 0 1 2j The elementwise function cdef void mandel single point double complex sz in double complex xc in double complex 2 cout nogi The Mandelbrot iteration Some points of note tp Ss NOU allowed to call any FPython functions hore The Ufunc loop runs with the Python Global Interpreter Lock released Hence the nogil t And so all local variables must be declared with edef tf Note also that this function receives Spoilnters to the dala 8 2 Universal functions 175 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 cdef double complex z z in 0 cdef double complex c c in 0 cder unb k the integer we use in the for oop TODO write the Mandelbrot iteration for one point
279. obel_text filter hsobel text Uses the following linear kernel for computing horizontal gradients 16 3 2 Non local filters Non local filters use a large region of the image or all the image to transform the value of one pixel gt gt gt camera data camera gt gt gt camera equalized exposure equalize_hist camera gt gt gt Rk use instead exposure equalize in skimage 0 7 Enhances contrast in large almost uniform regions 16 3 3 Mathematical morphology See http en wikipedia org wiki Mathematical_morphology Probe an image with a simple shape a structuring element and modify this image according to how the shape locally fits or misses the image Default structuring element 4 connectivity of a pixel 16 3 Image preprocessing enhancement 296 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt from skimage import morphology gt gt gt morphology dramond 1 array IlO ky Ol lo ur eb 0 Ly Oll dt yoe uaint Erosion minimum filter Replace the value of a pixel by the minimal value covered by the structuring element gt gt gt a np zeros 7 7 dtype np int gt gt gt all 6 2 5 1 gt gt gt a array 07 0 Up 0 dU 0 01 Oy Oe dra the See iO 2s OG n MES abe ee os Oui BOG Sh ae ss 20015 Oh Oe dO dL 3e Bs 8 Og HOG eO duc Chu S iO eO 9 v0 WEE OL rca 305 nO a gt gt gt morphology binary ero
280. of 1nt32 OR 1 of float32 OR How to switch from one to another 1 Switch the dtype gt gt gt x np array 1 2 3 4 dtype np uint8 noc Say pe M12 gt gt gt x array 512154 1027 dtype in Ie gt gt gt 05402015 0x0403 m o EDI 9x01 0x02 W 0x03 0x04 Note little endian least significant byte is on the left in memory 2 Create a new view gt gt gt y x view lt i4 gt gt gt y array 61305985 deyce int 27 gt gt gt 0x04030201 CT 03925 8 1 Life of ndarray 165 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Note e view makes views does not copy or alter the memory block only changes the dtype and adjusts array shape gt gt gt x 1 5 gt gt gt y array 3228193 dbypesinbt32 gt gt gt y base is x ACIE Mini exercise data re interpretation See also view colors py You have RGBA data in an array gt gt gt x np zeros 10 10 4 dtype np int89 gt gt gt Sols S 0l gt gt gt Sp lt IJ 2 aos Sa 2r uS gt gt gt x 3 4 where the last three dimensions are the R B and G and alpha channels How to make a 10 10 structured array with field names r g b a without copying data gt gt gt y iaa gt gt gt assert y r 1 all gt gt gt assert y g 2 all gt gt gt assert y b 3 all gt gt
281. ollowing skim age s conventions util img as float util img as ubyte etc See the user guide for more details 16 2 2 Colorspaces Color images are of shape N M 3 or N M 4 when an alpha channel encodes transparency gt gt gt lena data lena gt gt gt lena shape use ees 39 Routines converting between different colorspaces RGB HSV LAB etc are available in skimage color color rgb2hsv color lab2rgpb etc Check the docstring for the expected dtype and data range of input images 3D images Some functions of skimage can take 3D images as input arguments Check the docstring to know if a function can be used on 3D images for example MRI or CT images Exercise Open a color image on your disk as a NumPy array Find a skimage function computing the histogram of an image and plot the histogram of each color channel Convert the image to grayscale and plot its histogram 16 3 Image preprocessing enhancement Goals denoising feature edges extraction 16 3 1 Local filters Local filters replace the value of pixels by a function of the values of neighboring pixels The function can be linear or non linear Neighbourhood square choose size disk or more complicated structuring element 16 3 Image preprocessing enhancement 295 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Example horizontal Sobel filter gt gt gt text data text gt gt gt hs
282. olor l dy 1 geolor 0 5 0 5 0 5 Save figure to image file m1ab savefig foo png size 300 300 Change the view mlab view azimuth 45 elevation 54 distance 1 Changing plot properties Tip In general many properties of the various objects on the figure can be changed If these visualization are created via ml ab functions the easiest way to change them is to use the keyword arguments of these functions as described in the docstrings 18 1 Mlab the scripting interface 327 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Example docstring mlab mesh Plots a surface using grid spaced data supplied as 2D arrays Function signatures meos S Zr poa X y Zare 2D arrays all of the same shape giving the positions of the vertices of the surface The connectivity between these points is implied by the connectivity on the arrays For simple structures such as orthogonal grids prefer the surf function as it will create more efficient data structures Keyword arguments color the color of the vtk object Overides the colormap if any when specified This is specified as a triplet of float ranging from 0 to 1 eg 1 1 1 for white colormap type of colormap to use extent xmin xmax ymin ymax zmin zmax Default is the x y z arrays extents Use this to change the extent of the object created figure Figure to populate line width The with of the lines if any used Must be a floa
283. onversion among sparse formats when converting to other format usually CSR or CSC duplicate entries are summed together facilitates efficient construction of finite element matrices Examples create empty COO matrix gt gt gt mtx sparse coo matrix 3 4 dtype np int8 gt gt gt mtx todense nexa asc O sy Wy Olly Oye Oy Oy 0 0 O 0 dtype int89 create using data ij tuple Do pow Mpsarkray lO 39 1 07 2 gt gt COL Mpsarray pe 3 1 an gt gt gt data np array 4 5 7 9 gt gt gt mtx sparse coo matrix dat gt gt gt mtx lt 4x4 sparse matrix of With 4 stored gt gt gt mtx todense gn iene aee eae O 0 O O rO em 5 O3 amp duplicates entries are summed together poo COW Movarray 0 07 d 5 c0 0i gt gt gt COl Howarray 0 227 cu 3 XE cs 0 gt gt gt ara Ho array ll til da le ie SED gt gt gt mtx Sparse CoOo_Makrix daca row Col gt gt gt MEX Lodense mate T toe s a s ro a Op todos Wee pr oo XU 05 395 9095 e TR no slicing gt gt gt ME I2 3 Traceback most recent call last Twpebkrror coo matrix object Compressed Sparse Row Format CSR row oriented three NumPy arrays indices indptr data indices is array of column indices data is array of corresponding nonzero values 11 2 Storage Schemes type
284. or directory to another location shutil copy Copy files or directories 2 7 3 glob Pattern matching on files The glob module provides convenient file pattern matching Find all files ending in t xt In 18 import glob En LDIS9ISgUobsbobu eb Ont r19 hed Vieira exes Yikes Cuuowrrllescbestt 2 4 sys module system specific information System specific information related to the Python interpreter Which version of python are you running and where is it installed 2 7 Standard Library 38 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In piv sysaclaerormn oot ISI Is darwan In 118 sys version Out SLeu2xe5vir2brc6091l mob 22 200859 07 57 57 An GCC 4 0 1 Apple Computer Inc build 5363 In PLIS Sy Spesa Out 119 Library Frameworks Python framework Versions 2 5 List of command line arguments passed to a Python script In 100 sys argv Cue DOLI 7Users churns local b rpn ipython sys path is a list of strings that specifies the search path for modules Initialized from PYTHONPATH In 121 sys path Oia aba i eae sers Cournms local bin gt Lo Users courns local lab pythonZ 5 site packages grimn 1 l py2 5 eq0 Users cburns local lib python2 5 site packages argparse 0 8 0 py2 5 egg Users courns Vocal lab eython2 5 site packages urwid 0 9 2l py2 5 600 sens olus Moodle eyenon2 5 stte
285. or ill conditioned problems With knowledge of the gradient e BFGS scipy optimize fmin bfgs OT L BFGS scipy optimize fmin l bfgs b Computational overhead of BFGS is larger than that L BFGS itself larger than that of conjugate gradient On the other side BFGS usually needs less function evaluations than CG Thus conjugate gradient method is better than BFGS at optimizing computationally cheap functions With the Hessian e If you can compute the Hessian prefer the Newton method sclpy optimize tfmin negct If you have noisy measurements Use Nelder Mead scipy optimize fmin Or Powell scipy optimize fmin powell 13 3 2 Making your optimizer faster Choose the right method see above do compute analytically the gradient and Hessian if you can Use preconditionning when possible Choose your initialization points wisely For instance if you are running many similar optimizations warm restart one with the results of another Relax the tolerance if you don t need precision 13 3 3 Computing gradients Computing gradients and even more Hessians is very tedious but worth the effort Symbolic computation with Sympy page 284 may come in handy Warning A very common source of optimization not converging well is human error in the computation of the gradient You can use scipy optimize check grad to check that your gradient is correct It returns the norm of the different between the gradient
286. ording to how the shape locally fits or misses the image Structuring element gt gt gt el ndimage generate_binary_structure 2 1 gt gt gt el array False True False True True True False Irue False dtype bool gt gt gt el astype np int array IIo y Ol puse amine ees e Eres le e qe Erosion minimum filter Replace the value of a pixel by the minimal value covered by the structuring element gt gt gt a np zeros 7 7 dtype np int gt gt gt all 6 2 5 1 gt gt gt a array sc Oy d Oy I S Ore Or bsc EL Eh O SONIS AGES nb hec e be dos nos Gis s bye odo Sos rc RORIS ur dii kem bas O DOES OM Hoe dies Who xx 305 O 0 Du uM Wy De Oe 0 qm gt gt gt ndimage binary erosion a astype a dtype array r0 0 0 0 OW qc 0l LORS Sls Oa We 405 JO O Oi ur AO es Oe 10 ONIS Og Or OP hy 0 20y Oh Dus 20 Ose SES SOC dO S Ode VO NO a JO 10 105 39 12 4 Image filtering 238 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 0 0 0 0 0 0 0 gt gt gt Erosion removes objects smaller than the structure gt gt gt ndimage binary erosion a structure np ones 5 5 astype a dtype arcay I0 Ox 05 07 20 0 0 DO COLS OS TUE POS os Kris Do uu SOS aes OD Occ MODs EOE 05 05 707 d c AP CORSO Due 10 gu OU SO Tes Oe Oy erre Oe MO 10 Or ioc dre Oe Ds
287. ormalize False precompute auto tol 0 0001 verbose False gt gt gt The estimator chose automatically its lambda gt gt gt lasso alpha CaO als See These estimators are called similarly to their counterparts with CV appended to their name Exercise On the diabetes dataset find the optimal regularization parameter alpha 19 7 Model selection choosing estimators and their parameters 347 D diff 287 289 differentiation 287 dsolve 289 E equations algebraic 288 differential 289 integration 287 M Matrix 289 P Python Enhancement Proposals PEP 255 146 PEP 3118 182 PEP 3129 156 PEP 318 149 156 PEP 342 146 PEP 343 156 PEP 380 148 PEP 380 id13 148 PEP 8 151 S solve 288 Index 348
288. ot all optimization problems are equal Knowing your problem enables you to choose the right tool Dimensionality of the problem The scale of an optimization problem is pretty much set by the dimensionality of the problem i e the number of scalar variables on which the search is performed 13 1 Knowing your problem 248 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 13 1 1 Convex versus non convex optimization A convex function A non convex function f is above all its tangents equivalently for two point A B f C lies below the segment f A f B if A C B Optimizing convex functions is easy Optimizing non convex functions can be very hard Note A convex function provably has only one minimum no local minimums 13 1 2 Smooth and non smooth problems A smooth function A non smooth function The gradient is defined everywhere and is a continuous function Optimizing smooth functions is easier 13 1 Knowing your problem 249 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 13 1 3 Noisy versus exact cost functions Noisy blue and non noisy green functions Noisy gradients Many optimization methods rely on gradients of the objective function If the gradient function is not given they are computed numerically which induces errors In such situation even if the objective function is not noisy 13 1 4 Constraints Optimizations un
289. otes Release 2013 2 beta euroscipy 2013 Symbols can now be manipulated using some of python operators arithmetic amp gt gt lt lt boolean 15 2 Algebraic manipulations SymPy is capable of performing powerful algebraic manipulations We ll take a look into some of the most frequently used expand and simplify 15 2 1 Expand Use this to expand an algebraic expression It will try to denest powers and multiplications In 23 expand x y 3 Out 23 Saxe years F Sayer F xiko T yri Further options can be given in form on keywords In 28 expand xty complex True VO PAS s diem x a OESTE CV a re x F rey Im 20 expand cos x y Erig irue Duto Ol Cost eos v 2S imix e 15 2 2 Simplify Use simplify if you would like to transform an expression into a simpler form In 19 simplify x x y x beu se 1 T y Simplification is a somewhat vague term and more precises alternatives to simplify exists powsimp simplifica tion of exponents trigsimp for trigonometric expressions logcombine radsimp together 15 2 3 Exercises 1 Calculate the expanded form of x y 9 2 Simplify the trigonometric expression sin x cos x 15 3 Calculus 15 3 1 Limits Limits are easy to use in SymPy they follow the syntax limit function variable point so to compute the limit of f x as x gt 0 you would issue limit f x 0 Lima e Ec a
290. p 1ongdoub1e ccc np rini onp diro ree s SONS Tos eA oo mox imos OXON loat A IE TOS 22922044604 9250313 1e 16 pz tloat 32 le e mpitloato2 1 1 True gt gt gt np float64 1e 8 np float64 1 1 False Complex floating point numbers 3 3 More elaborate arrays 1 68 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Smaller data types If you don t know you need special data types then you probably don t Comparison on using float 32 instead of float 64 Half the size in memory and on disk Half the memory bandwidth required may be a bit faster in some operations In 1 a np zeros 1e6 dtype np float64 In 2 b np zeros le6 dtype np float32 In 3 timeit axa 1000 Loops best of 5 1 76 ms per loop In 4 3 crmeit b b 1000 Loopsy best or 59 1 07 ms per loop But bigger rounding errors sometimes in surprising places 1 e don t use them unless you really need them 3 3 2 Structured data types 4 character string oa gt gt gt samples np zeros 6 dtype sensor code S4 UE Cpos tion tloac 7 value dauleost gt gt gt samples ndim ii gt gt gt samples shape 6 gt gt gt samples dtype names sensor code position value gt gt gt samples ALFA bo 259 OBETA bes RES MAP dr Cae eae OARRA 2 coi dg ATEA LL 35 Oe CRT ve SOS CES gt gt gt samples
291. p py is what takes most of our time a k a the bottleneck We have to find a way to make this step go faster or to avoid this step algorithmic optimization Spending time on the rest of the code is useless 10 2 3 Line profiler The profiler is great it tells us which function takes most of the time but not where it is called For this we use the line profiler in the source file we decorate a few functions that we want to inspect with profile no need to import it Qprofile def test data fp rancdom random 5000 100 Uy Sy wv linalg svd data pea Mo Qot ul b data results fastica pca T whiten False Then we run the script using the kernprof py program with switches 1 line by line and v view to use the line by line profiler and view the results in addition to saving them 10 2 Profiling Python code 205 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 kernprof py C v Clemo spy Wrote profile results to demo py lprof Timer unit dec S File demo py Function test at line 5 More came ds LS Line FEES Time Per Hit Time Line Contents E aprofile 6 def test 7 1 19015 19015 0 omi data mnp randon random 5000 100 8 1 14242163 14242163 0 PIT Uy sS Vv Limalowsvd data 9 1 10282 102862 0 Do pes mo cor do cil cara 10 1 71199 7TT99 0 D results fastica pca T whiten False The SVD is taking all the time We need to optimise this line 10 2 4
292. p_scale auto Arbitrary regular mesh mesh Hint A surface mesh given by x y z positions of its node points MmiabselLt Dhak Phebe npn 0 emp pas dt eeempuprcsd pha e mpo cos thera yo ceps auno huh cer v ses derit te bve i a z npecos phi mlab mesh x y zZ mlab mesh x y Z representation wireframe color 0 0 0 x np sin Note A surface is defined by points connected to form triangles or polygones In mayavi mlab surf and mayavi mlab mesh the connectivity is implicity given by the layout of the arrays See also mayavi mlab triangular_mesh Our data is often more than points and values it needs some connectivity information Volumetric data contour3d p Hint If your data is dense in 3D it is more difficult to display One option is to take iso contours of the data 18 1 Mlab the scripting interface 326 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 mlab cif 3 ye Uus pe mgridi oD GaTe 0o GAT o2 55645 values oue te yry h epus 0 mlab contour3d values This function works with a regular orthogonal grid the value array is a 3D array that gives the shape of the grid 18 1 2 Figures and decorations Figure management Tip Here is a list of functions useful to control the current figure Get the current figure mlab gcf Clear the current figure mlab clf Set the current figure mlab figure l bgo
293. pines e Axis container e Transformations tutorial Tip Spines are the lines connecting the axis tick marks and noting the boundaries of the data area They can be placed at arbitrary positions and until now they were on the border of the axis We ll change that since we want to have them in the middle Since there are four of them top bottom left right we ll discard the top and right by setting their color to none and we ll move the bottom and left ones to coordinate 0 in data space coordinates Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 ax pl gca y gos stands for get Current axis ax spines rrghbt scset color none ax Spines top seu color none dococdoruSs sel ticks position boreom axe orl nes bDoteom Sser positron data 70 dstovaxus seb ticks pesmi ron left Lax spines bere see Position data 0 4 2 8 Adding a legend Hint Documentation Legend guide legend command Legend API Tip Let s add a legend in the upper left corner This only requires adding the keyword argument label that will be used in the legend box to the plot commands ipl plot X C color blue linewidth 2 5 linestyle label cosine lodpiob 0 95 eolor fed linewidth 2 5 linestyle label sine pL legend loc upper left 4 2 9 Annotate some points 2x sin v3 gt w cosine sine Hint
294. pit show Creating a numpy array from an image file gt gt gt from scipy import misc gt gt gt lena misc imread lena png gt gt gt type lena type numpy ndarray gt 12 1 Opening and writing to image files 231 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt lena shape lena dtype Volz Giza aey ou Tu 9 dtype is uint8 for 8 bit images 0 255 Opening raw files camera 3 D images gt gt gt l tofile lena raw Create raw file gt gt gt lena from raw np fromfile lena raw dtype np int64 gt gt gt lena from raw shape 262144 gt gt gt lena_from_raw shape 512 512 gt gt gt import os gt gt gt os remove lena raw Need to know the shape and dtype of the image how to separate data bytes For large data use np memmap for memory mapping gt gt gt lena memmap np memmap lena raw dtype np int64 shape 512 512 data are read from the file and not loaded into memory Working on a list of image files gt gt gt for i in range 10 im np random random integers 0 255 10000 reshape 100 100 a misc imsave random 02d png i im gt gt gt from glob import glob gt gt gt filelist glob random pag ooo CEQLelist sortqt 12 2 Displaying images Use matplotlib and imshow to display an image inside amatplotlib figure gt gt gt 1 misc lena gt gt g
295. pulations 235 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 12 4 Image filtering Local filters replace the value of pixels by a function of the values of neighboring pixels Neighbourhood square choose size disk or more complicated structuring element E B s is 12 4 1 Blurring smoothing Gaussian filter from scipy ndimage gt gt gt from scipy import misc gt gt gt lena misc lena gt gt gt blurred_lena ndimage gaussian_filter lena sigma 3 gt gt gt very_blurred ndimage gaussian_filter lena sigma 5 Uniform filter gt gt gt local mean ndimage uniform_filter lena size 11 12 4 2 Sharpening Sharpen a blurred image gt gt gt from scipy import misc gt gt gt lena misc lena gt gt gt blurred_l ndimage gaussian_filter lena 3 increase the weight of edges by adding an approximation of the Laplacian gt gt gt filter_blurred_l ndimage gaussian_filter blurred_l 1 gt gt gt alpha 30 gt gt gt sharpened blurred_l alpha blurred 1 filter blurred 1 12 4 Image filtering 236 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Jic FEBRE QAM Man Gs HR Ps 12 4 3 Denoising Noisy lena from scipy import misc 1 misc lena js see SOS MOS 20 9 noisy 1 0 4 l std np random random l shape A Gaussian filter smoothes the noise out and the edges as well gt
296. r invoke in parallel then kill thread pool py gt 3 2 concurrent futures ProcessPoolExecutor invoke in parallel then kill process pool py gt 3 2 nogil solve the GIL problem temporarily cython only 7 3 1 Catching exceptions When an exception is thrown in the with block it is passed as arguments to__ exit Three arguments are used the same as returned by sys exc info type value traceback When no exception is thrown None is used for all three arguments The context manager can swallow the exception by returning a true value from exit Exceptions can be easily ignored because if exit doesn t use return and just falls of the end None is returned a false value and therefore the exception is rethrown after exit is finished The ability to catch exceptions opens interesting possibilities A classic example comes from unit tests we want to make sure that some code throws the right kind of exception class assert raises object based on pytest and unittest TestCase def init self type 7 3 Context managers 157 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 self type type def enter self pass def exit self type value traceback if type is None raise AssertionError exception expected if issubclass type self type return True swallow the expected exception raise AssertionError wrong exception type with assert raises Key
297. r GetDataPtrArray in iter double out dataptr double NpyIter GetDataPtrArray out iter iterate over the arrays do sous dataptr cos Iin dataptr while in_iternext in_iter amp amp out_iternext out_iter clean up and return the result NpyIter Deallocate in iter NpyIter Deallocate out iter Py_INCREF out_array return out_array in case bad things happen fail Py_XDECREF out_array return NULL Jer aS X uncos o module a7 Static Po Mer noder ose Cos rune To COS FUNG o METH VARARGS evaluate the cosine on a numpy array CINES NUCL O7 NOLL module initialization 142 Python C Api 87 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 PyYMODINIT_FUNC in nitccos module np void void Py InitModule cos module np CosMethods IMPORTANT this must be called import array To compile this we can use distutils again However we need to be sure to include the Numpy headers by using numpy get include from distutils core import setup Extension import numpy define the extension module cos module np Extension cos module np sources cos module np c include dirs numpy get include run the setup setup ext modules cos module np To convince ourselves if this does actually works we run the following test script import cos module np import numpy as np import pylab x np arange 0
298. r you thus mak ing it more like the Numpy C API example 14 8 3 SWIG 1 Look at the code that SWIG autogenerates how much of it do you understand 2 Modify the Numpy example such that cos doubles func handles the preallocation for you thus mak ing it more like the Numpy C API example 3 Modify the cos doubles C function so that it returns an allocated array Can you wrap this using SWIG typemaps If not why not Is there a workaround for this specific situation Hint you know the size of the output array so it may be possible to construct a Numpy array from the returned double x 14 8 Exercises 280 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 14 8 4 Cython 1 Look at the code that Cython autogenartes Take a closer look at some of the comments that Cython inserts What do you see 2 Look at the section Working with Numpy from the Cython documentation to learn how to incrementally optimize a pure python script that uses Numpy 3 Modify the Numpy example such that cos doubles func handles the preallocation for you thus mak ing it more like the Numpy C API example 14 8 Exercises 281 Part III Packages and applications 282 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 This part of the Scipy lecture notes is dedicated to various scientific packages useful for extended needs 283 CHAPTER 15 Sympy Symbolic Mathematics in Python author Fabian Ped
299. r3 l 2 lt radius 42 gt gt gt circle4 x center4 0 2 y center4 1 2 radius4 x 2 gt gt gt 4 circles gt gt gt img case do circle t Circle T Circlesd gt gt gt mask img astype bool gt gt gt img img astype float gt gt gt amg t 1 0 2 np random randn i rimg shape gt gt gt Convert the image into a graph with the value of the gradient on gt gt gt the edges gt gt gt graph image img_to_graph img mask mask gt gt gt Take a decreasing function of the gradient we take it weakly gt gt gt dependant from the gradient the segmentation is close to a voronoi gt gt gt graph data np exp graph data graph data std gt gt gt labels spectral_clustering graph k 4 mode arpack gt gt gt label im np ones mask shape 12 5 Feature extraction 242 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt label im mask labels 12 6 Measuring objects properties ndimage measurements Synthetic data gt gt gt n 10 gt gt gt 1 256 gt gt gt im npozeros L 1 gt gt gt points lane randoms random 2 n 2 22 im POIN tS lO Neas ype no Points saseyoe np wasnt eed gt gt gt im ndimage gaussian_filter im sigma 1 4 x n gt gt gt mask im gt im mean Analysis of connected components Label connected components ndimage label gt gt
300. raits api import HasTraits Array Instance Float Property from traits api import DelegatesTo from traitsui api import View Item Group from chaco chaco plot editor import ChacoPlotItem from reservoir import Reservoir class ReservoirEvolution HasTraits reservoir Instance Reservoir name DelegatesTo reservoir inflows Array dtype np float604 shape None releass Array dtype np float64 shape None initial stock Float stock Property depends_on inflows releases initial_stock month Property depends_on stock Traits view teeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee eee eee HH HH HEA THE traits view View item 7 name Group 17 3 What are Traits 321 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 ChacoPlocitent Monch stock 7 show Label Pelse E widen 500 resizable True Traits properties 9T STq3qTTT PTTSTTTTHTTTScrPEPTSTTSSSPRSPETESTPSygqsrpSsPySS3y get stock self i m m fixme should handle cases where we go over the max storage wee return self initial stock self inflows self releases cumsum get month selt return np arange self stock size if name as matu 7 3 reservoir Reservoir name Project A max storage 30 max release 100 0 head 60 efficiency 0 8 qe dal sroek 10 ini Lows ts Np array Oez releases_ts np array 4 view ReservoirEvolution reservo
301. rch and cross validated estimators page 347 337 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 19 1 Loading an example dataset First we will load some data to play with The data we will use is a very simple flower database known as the Iris dataset We have 150 observations of the iris flower specifying some measurements sepal length sepal width petal length and petal width together with its subtype Iris setosa Iris versicolor Iris virginica To load the dataset into a Python object gt gt gt from sklearn import datasets gt gt gt iris datasets load_iris This data is stored in the dat a member which isa n samples n features array gt gt gt Iris data Shape 1505 4 The class of each observation is stored in the target attribute of the dataset This is an integer 1D array of length n_samples gt gt gt iris target shape 150 gt gt gt import numpy as np gt gt gt np unique iris target arro MD 21 19 1 Loading an example dataset 338 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 An example of reshaping data the digits dataset SN OW BP WN KF CO 012 3 4 5 6 7 The digits dataset consists of 1797 images where each one is an 8x8 pixel image representing a hand written digit digits datasets load_digits gt gt gt digits images shape OU dias 55 gt gt gt import pylab as pl gt gt
302. re the decorator syntax was implemented PEP 318 it was possible to achieve the same effect by assigning the function or class object to a temporary variable and then invoking the decorator explicitly and then assigning the return value to the name of the function This sounds like more typing and it is and also the name of the decorated function doubling as a temporary variable must be used at least three times which is prone to errors Nevertheless the example above is equivalent to def function e pass Luncii on decorator EB EE o Decorators can be stacked the order of application is bottom to top or inside out The semantics are such that the originally defined function is used as an argument for the first decorator whatever is returned by the first decorator is used as an argument for the second decorator and whatever is returned by the last decorator is attached under the name of the original function The decorator syntax was chosen for its readability Since the decorator is specified before the header of the function it is obvious that its is not a part of the function body and its clear that it can only operate on the whole function Because the expression is prefixed with is stands out and is hard to miss in your face according to the PEP When more than one decorator is applied each one is placed on a separate line in an easy to read way 7 2 1 Replacing or tweaking the original object Decora
303. regosa Objectives Evaluate expressions with arbitrary precision Perform algebraic manipulations on symbolic expressions Perform basic calculus tasks limits differentiation and integration with symbolic expressions Solve polynomial and transcendental equations Solve some differential equations What is SymPy SymPy is a Python library for symbolic mathematics It aims become a full featured computer algebra system that can compete directly with commercial alternatives Mathematica Maple while keeping the code as simple as possible in order to be comprehensible and easily extensible SymPy is written entirely in Python and does not require any external libraries Sympy documentation and packages for installation can be found on http sympy org Chapters contents First Steps with SymPy page 285 Using SymPy as a calculator page 285 Exercises page 285 Symbols page 285 Algebraic manipulations page 286 Expand page 286 Simplify page 286 Exercises page 286 Calculus page 286 Limits page 286 Differentiation page 287 Series expansion page 287 Exercises page 287 Integration page 287 Exercises page 288 Equation solving page 288 Exercises page 289 Linear Algebra page 289 Matrices page 289 Differential Equations page 289 Exercises page 290 284 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 15 1 First Steps
304. rful 2 readable Looping over a dictionary Use iteritems so xg qe de Mp cq so gt gt gt for key val in d iteritems print Key s has value s key val 2 3 Control Flow 21 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Key a has value 1 Key c has value 1j Kev b has value 1 2 2 3 6 List Comprehensions gt gt gt i x x2 for i in range 4 OF iy 4 9 Exercise Compute the decimals of Pi using the Wallis formula CO A Ai 9 Hu 2 4 Defining functions 2 4 1 Function definition In 56 def test aU Print in test runctiron in 57 testi im CEST CUNCELON Warning Function blocks must be indented as other control flow blocks 2 4 2 Return statement Functions can optionally return values In 6 def disk_area radius return 3 14 x radius x radius In 8 disk_area 1 5 Out 8 7 0649999999999995 Note By default functions return None Note Note the syntax to define a function the def keyword is followed by the function s name then e the arguments of the function are given between parentheses followed by a colon the function body 2 4 Defining functions si Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e and return object for optionally returning values 2 4 3 Parameters Mandatory parameters positional arguments In 81 def double it x Mm TE return x gt 2 in
305. ript py S python em pdb and ex error py gt home varoquau dev scipy lecture notes advanced debugging_optimizing index_error pyff1 module a we Small snippet to raise gh IndexEPror t Pdb continue Traceback most recent call last Poe ust Iie pyehome 16 pdioeey bine 2 OG ann mien pdb r unsceriQipe mavnpyftile Bankes Aso lato Ae va bio o apice S2 mer 2S Gen miniseries self run statement Etle usr inle Ehon clo py Meio OO tial UN exec cmd in globals locals File otri y deme d in modulo File index_error py line 8 in lt module gt index error File index error py line 5 in index error pue Lori tenter IndexError list index out of range Uncaught exception Entering post mortem debugging Running cont or step will restart the program gt home varoquau dev scipy lecture notes advanced debugging optimizing index error pyW5 index er gt print disp pberne st Pdb Step by step execution Situation You believe a bug exists in a module but are not sure where For instance we are trying to debug wiener_filtering py Indeed the code runs but the filtering does not work well e Run the script in Python with the debugger using Srun d wiener filtering p 9 3 In 1 run d wiener_filtering py Blank Or Comment see Blank or Comment x ee Blank or Comment Breakpoint 1 at home varoquau dev scipy lecture notes advanced debugging optimizing wiener
306. rix common CSR CSC functionality subclass of data matrix sparse matrix classes with data attribute fast matrix vector products and other arithmetics sparsetools constructor accepts dense matrix array sparse matrix shape tuple create empty matrix data ij tuple data indices indptr tuple efficient column slicing column oriented operations slow row slicing expensive changes to the sparsity structure use actual computations most linear solvers support this format Examples create empty CSC matrix gt gt gt mtx sparse csc matrix 3 4 dtype np int8 gt gt gt mtx todense Meret x m xq O xL one XUI LOS 0 d Oil dbypesqms create using data ij tuple 11 2 Storage Schemes 221 gt gt gt gt gt gt gt gt gt gt gt gt gt gt gt Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 HOw WO we Io mU su wu dad gol me array y ize cbe d data npe array M 2 3 4 5 9 MEX sparse csc matrrx data row COL shape 5 3 mtx lt 3X3 sparse matrix of type lt type amid gt with 6 stored elements in Compressed Sparse Column format gt gt gt gt mtx todense matri a ile C a Os Or ol do Se Gi gt gt gt mtx data array 1l 4 5 2 9 gt gt gt mtx indices array LO 27 25 07 duly deypeeunmnu 2 gt gt gt Ix compri array lO 2 37 Ol Geype int3Z e create
307. roperties such that they ll be rendered on a semi transparent white background This will allow us to see both the data and the labels for label in ax get xticklabels ax get yticklabels label set fontsize 10 label set bbox dict facecolor white edgecolor None alpha 0 65 4 3 Figures Subplots Axes and Ticks A figure in matplotlib means the whole window in the user interface Within this figure there can be subplots Tip So far we have used implicit figure and axes creation This is handy for fast plots We can have more control over the display using figure subplot and axes explicitly While subplot positions the plots in a regular grid axes allows free placement within the figure Both can be useful depending on your intention We ve already worked 4 3 Figures Subplots Axes and Ticks 88 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 with figures and subplots without explicitly calling them When we call plot matplotlib calls gca to get the current axes and gca in turn calls gcf to get the current figure If there is none it calls figure to make one strictly speaking to make a subplot 111 Let s look at the details 4 3 1 Figures Tip A figure is the windows in the GUI that has Figure as title Figures are numbered starting from 1 as opposed to the normal Python way starting from 0 This is clearly MATLAB style There are several parameters that determine what
308. rray with the given shape and strides x e Novarray ll Z2 3 Al dtypesup runtl6 gt gt gt as strided x strides 2 2 shape 2 array 1 3 dtype intl16 a ae a ee array l 3 dtbype rnt 6 See also stride fakedims py Exercise 8 1 Life of ndarray 169 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 dtype np int8 Spoiler Stride can also be 0 gt gt gt x np array 1 2 3 4 dtype np int8 gt gt gt y as_strided x strides 0 1 shape 3 4 gt gt gt y array bL 3 EES A oe al E 2 Sy 4 y dtypesinteg gt gt gt y base base is x True Broadcasting e Doing something useful with it outer product of 1 2 3 4 and 5 6 7 255 lt Mo warray iy Xe 35 wl deye np mnt 6 gt gt gt x2 as strided x strides 0 1 2 shape 3 4 gt gt gt x2 gt gt gt y np array 5 6 7 dtype np int16 gt gt gt y2 as_strided y strides 1 2 0 shape 3 4 gt gt gt y2 array 5 Oy dq 0 5 Loe Lorp S2 lig 14 21 Od e dtype int lo x NoOvarray 1 4 dtype np intl6 gt gt gt y nos array I5 7 dtype 2np int160 gt gt gt xin D Newaxis yli npsnewaxis array Is 10 15 20l l 6 12 18 24 dy d 21 28l dtype i1nt 16 Internally array broadcasting is indeed implemented using O strides More tricks diagonals See also 8 1 Life of ndarray 170 Python
309. ry Ou cubo gt gt gt import scipy scientific computing In Python x y Ipython x y executes the following imports at startup gt gt gt import numpy gt gt gt import numpy as np gt gt gt from pylab import x gt gt gt import scipy and it is not necessary to re import these modules 2 5 3 Creating modules Tip If we want to write larger and better organized programs compared to simple scripts where some objects are defined variables functions classes and that we want to reuse several times we have to create our own modules Let us create a module demo contained in the file demo py A demo module def print_b Eerincs DY prine 7b def print a ujeme n mee ea print a Tip In this file we defined two functions print a and print b Suppose we want to call the print a function from the interpreter We could execute the file as a script but since we just want to have access to the function print a we are rather going to import it as a module The syntax is as follows 2 5 Reusing code scripts and modules 29 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 In 1 import demo in 2 demo print a a In 3 Ceno eri met b Importing the module gives access to its objects using the module object syntax Don t forget to put the module s name before the object s name otherwise Python won t recognize the instruction Introspection In 4
310. ry propagation eroded img mask binary img gt gt gt tmp np logical not reconstruct img gt gt gt eroded tmp ndimage binary erosion tmp gt gt gt reconstruct final np logical not ndimage binary propagation eroded tmp mask t gt gt gt np abs mask close img mean DIDIT OSSA gt gt gt np abs mask reconstruct final mean 0 004225720214894 375 Exercise Check how a first denoising step e g with a median filter modifies the histogram and check that the resulting histogram based segmentation is more accurate See also More advanced segmentation algorithms are found in the scikit image see Scikit image image processing page 291 See also Other Scientific Packages provide algorithms that can be useful for image processing In this example we use the spectral clustering function of the scikit learn in order to segment glued objects gt gt gt from sklearn feature extraction import image gt gt gt from sklearn cluster import spectral clustering gt gt gt 100 gt gt gt x y inprindices i a gt gt gt centerl 28 24 gt gt gt center2 40 50 gt gt gt center3 67 58 gt gt gt center4 24 70 poc radiusl rmadiusZ 6adiuss radius4 16 14 15 14 gt gt gt cimrelel x ccenteri 0 2 tty centrer Ia x radins Po CIrolo lt center210 ywe2 xw cen er la Tradi na gt gt gt Circles x centers 0 s2 4 y ocenbe
311. s gt gt gt from scipy misc import imsave gt gt gt mssave tiny elephant pno amg 26 22 6 34 Advanced operations 78 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt plt imshow plt imread tiny elephant png interpolation nearest lt matplotlib image AxesImage object at gt 0 10 20 30 40 Numpy s own format Numpy has its own binary format not portable but with efficient I O gt gt gt data np ones 3 3 gt gt gt ND Save Dpop npy data gt gt gt datas mpokoed pop npy Well known amp more obscure file formats e HDF5 h5py PyTables e NetCDF scipy io netcdf_file netcdf4 python Matlab scipy io loadmat scipy io savemat MatrixMarket scipy io mmread scipy io mmread If somebody uses it there s probably also a Python library for it Exercise Text data files Write a Python script that loads data from populations txt and drop the last column and the first 5 rows Save the smaller dataset to pop2 txt 3 4 Advanced operations 74 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Num py internals If you are interested in the Numpy internals there is a good discussion in Advanced Numpy page 159 3 5 Some exercises 3 5 1 Array manipulations 1 Form the 2 D array without typing it in explicitly lee ox IE Lay ee dE Eo cr Loly 45 97 TA loo ce
312. s 5 7 Interpolation scipy interpolate The scipy interpolate is useful for fitting a function from experimental data and thus evaluating points where no measure exists The module is based on the FITPACK Fortran subroutines from the netlib project By imagining experimental data close to a sine function gt gt gt measured time np linspace 0 1 10 gt gt gt nonse np random random l0 2 1 1le 1 gt gt gt measures np sin 2 np pi measured time noise The scipy interpolate interpid class can build a linear interpolation function gt gt gt from scipy interpolate import interpld gt gt gt linear interp interpld measured time measures Thenthe scipy interpolate linear interp instance needs to be evaluated at the time of interest pue computed time np linspace 0 1 50 gt gt gt linear results linear interp computed time A cubic interpolation can also be selected by providing the k ind optional keyword argument gt gt gt cubic_interp interpld measured_time measures kind cubic gt gt gt cubic results cubic interp computed time The results are now gathered on the following Matplotlib figure 5 7 Interpolation scipy interpolate 115 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e e measures linear interp cubic interp 1 35 0 2 0 4 0 6 0 8 1 0 scipy interpolate interp2d is similar to scipy interpolate interpld
313. s Release 2013 2 beta euroscipy 2013 gt gt gt a np random normal size 1000 gt gt gt bins np arange 4 5 gt gt gt bins array 4 2 Hi OG We 2 3 o y gt gt gt histogram np histogram a bins bins normed True 0 gt gt gt bins 0 5 oins ble bine 2 1 gt gt gt bins pues eon wep eee isses Dey te eae 6S eos gt gt gt from scipy import stats 23 gt D Stats norm pdr bins T NORM WS 2 O LSeE rout lon In Il Cl splot bins histogram in 2 pl plot bgsms b 0 45 0 40 0 35 0 30 0 25 0 20 0 15 If we know that the random process belongs to a given family of random processes such as normal processes we can do a maximum likelihood fit of the observations to estimate the parameters of the underlying distribution Here we fit a normal process to the observed data gt gt gt loc Std stats norm fit 4 2 OC 0452516 T0749 6 2 gt gt gt std O29 7 O03 3586690 cud Exercise Probability distributions Generate 1000 random variates from a gamma distribution with a shape parameter of 1 then plot a histogram from those samples Can you plot the pdf on top it should match Extra the distributions have a number of useful methods Explore them by reading the docstring or by using Python tab completion Can you find the shape parameter of 1 back by using the it method on your random variates 5 6 2 Percentiles The median is the value with
314. s best or 3 Ill me per loop In 3 timeit global aj a 0 10 loops best of 3 48 4 ms per loop note we need global a in the timeit so that it work as it is assigning to a and thus considers it as a local variable Be easy on the memory use views and not copies Copying big arrays is as costly as making simple numerical operations on them In 1 a np zeros 1e 7 in 2 3mert a copy 0 10 loops best of 3 124 ms per loop In 3 timeit a 1 210 Loops best of 5 112 ms per loop Beware of cache effects Memory access is cheaper when it is grouped accessing a big array in a continuous way is much faster than random access This implies amongst other things that smaller strides are faster see CPU cache effects page 172 In 1 c np zeros 1e4 1e4 order C In 2 stimeic csum axis 0 Il Xoops best Of 3 3 89 s per loop In 3 timeit c sum axis 1 1 loops best of 3 188 ms per loop In l4 Cestrides Outta 80000 8 This is the reason why Fortran ordering or C ordering may make a big difference on operations In 5 a np random raeand 20 2 18 in 6 b np random rand 20 2 9 in scume c mp dot tb ST l loops best of 3 194 ms per loop In 8 c np ascontiguousarray a T In 19 5 tumeust mnpsde ib s 10 loops best of 3 84 2 ms per loop Note that copying the data to work around this effect may not be worth it In 10 timeit c np ascontiguousarray
315. s elementwise operations how to make new ones e Ndarray subclasses e Various buffer interfaces for integration with other tools Recent additions PEP 3118 generalized ufuncs 8 6 Contributing to Numpy Scipy Get this tutorial http www euroscipy org talk 882 8 6 1 Why e There s a bug e I don t understand what this is supposed to do I have this fancy code Would you like to have it Td like to help What can I do 8 6 2 Reporting bugs Bug tracker prefer this http projects scipy org numpy http projects scipy org scipy Click the Register link to get an account e Mailing lists scipy org Mailing_ Lists If you re unsure 8 5 Summary 188 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Noreplies in a week or so Just file a bug ticket Good bug report Title numpy random permutations fails for non integer arguments I m trying to generate random permutations using numpy random permutations When calling numpy random permutation with non integer arguments zi falls with lg Cryptic error messages gt gt gt Np random permutacion 12 array Uem dob cl IU 2 ihe ty CER Se 2 OR Sil poo MO random permuceac wom 2 Meaceback most recent call ast File lt stdin gt line 1 in lt module gt File Tmtrand pyx line 23311 in mtrand Randomstate permutation File mtrangspysx Line 3254 if mtrand Randomotate lt shuff le TypeError le
316. s 1s to list files cp to copy files and rm to remove files A list of aliases is shown when typing alias In 1 alias Total number of aliases 16 Ou TBI Cate uL Cat Uy Clear tolear s SOD Vp emo Veda ie o Scollow 21 mc LES Sy PLease ie uode orep fupe ies er greed ely seep 0 97 Udo Ce cz uo CO OIG I 1 Pix Ss F O Color dde Grep y les Le F color mm mem melie o mieu more more Comin my i A A d e he A Ne y P NL e A Lastly we would like to mention the tab completion feature whose description we cite directly from the IPython manual Tab completion especially for attributes is a convenient way to explore the structure of any object you re dealing with Simply type object_name lt TAB gt to view the object s attributes Besides Python objects and keywords tab completion also works on file and directory names In Il x 10 In 2 x TBE Oakes length x conjugate x denominator x imag x numerator x real in I3 lt raal x real bit length x real denominator x real numerator x real conjugate x real imag x real real In 4 x real 1 3 The interactive workflow IPython and a text editor 9 CHAPTER 2 The Python language authors Chris Burns Christophe Combelles Emmanuelle Gouillart Ga l Varoquaux Python for scientific computing We introduce here the Pyt
317. s available through the splrep and splev functions for respectively representing and evaluating a spline Moreover interpolation functions without the use of FITPACK parameters are also provided for simpler use see interpld interp2d barycentric interpolate and so on For the Sprog maxima wind speeds the UnivariateSpline will be used because a spline of degree 3 seems to correctly fit the data gt gt gt from scipy interpolate import UnivariateSpline gt gt gt quantile func UnivariateSpline cprob sorted max speeds The quantile function is now going to be evaluated from the full range of probabilities 2 nprprob np L nspace 0 1 eZ gt gt gt fitted max speeds quantile func nprob 2 In the current model the maximum wind speed occurring every 50 years is defined as the upper 2 quantile As a result the cumulative probability value will be 22 gt ic yr cu Ob S ie seen HOLD So the storm wind speed occurring every 50 years can be guessed by Doo pup Vy wind Cie bake hme Ce aS Foro ProD gt gt gt fifty wind SU VOI DUC cC The results are now gathered on a Matplotlib figure Exercise with the Gumbell distribution The interested readers are now invited to make an exercise by using the wind speeds measured over 21 years The measurement period is around 90 minutes the original period was around 10 minutes but the file size has been reduced for making the exercise setup easier The data are stored in
318. s python org tutorial datastructures html more on lists Add and remove elements gt gt gt L red blue green black white gt gt gt L append pink gt gt gt L red blus gqreen gt black white pink gt gt gt L pop removes and returns the last item P pum gt gt gt L ved blue green black white gt gt gt L extend pink purple extend L in place gt gt gt L L red blue greeny blsck whute pink purple 2 2 Basic types 14 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt L L 2 gt gt gt 1 red blues green black whwte Reverse 25 X IL gt gt gt r white black green blue red gt gt gt r2 list L gt gt gt e red blue green black white gt gt gt r2 reverse in place gt gt gt r2 whate black green blue red Concatenate and repeat lists gt gt gt qx d hh white black green blue red red blue green black white gt gt gt eue P white black green bluse red whrte black green bl e y red Tip Sort gt gt gt sorted r new object black blue green red white gt gt gt r white black green blue re
319. s ravel reshape sand labels shape 8 Compute the mean size of bubbles gt gt gt bubbles labels bubbles nb ndimage label void gt gt gt bubbles areas np bincount bubbles labels ravel 1 gt gt gt mean bubble size bubbles areas mean gt gt gt median bubble size np median bubbles areas gt gt gt mean bubble size median bubble size 5 11 Summary exercises on scientific computing 135 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e994 61 dO 5 11 Summary exercises on scientific computing 136 CHAPTER 6 Getting help and finding documentation author Emmanuelle Gouillart Rather than knowing all functions in Numpy and Scipy it is important to find rapidly information throughout the documentation and the available help Here are some ways to get information In Ipython help function opens the docstring of the function Only type the beginning of the func tion s name and use tab completion to display the matching functions In 204 help np v np vander np Vader np version Non you NO Vouack Nie Var np wvectorsze Np voilid Noe eho lIt In 204 help np vander In Ipython it is not possible to open a separated window for help and documentation however one can always open a second Ipython shell just to display help and docstrings e Numpy s and Scipy s documentations can be browsed online on http docs scipy org doc The
320. s track of the reservoir state given the initial storage n mm reservoir Instance Reservoir min storage Float max storage DelegatesTo reservoir min release Float max release DelegatesTo reservoir o acciri outas 17 3 What are Traits 316 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 storage Range low min_storage high max_storage control attributes inflows Float desc Inflows hm3 release Range low min_release high max_release spillage Float desc Spillage hm3 def print_state self print Storage tRelease tInflows tSpillage Str format XE joi 4Fs2f for zn ange 4 1 print str_format format self storage self release self inflows self spillage print SS 6 79 fff Traits listeners fFT ETTER ESESESRREEESETREESESRSREEAETEESTEESEERER EETREEEEETSTTTTT def release changed self new Wien tne release fo tighter Bion vero Wart ail see mmc the valley m m if new gt 0 print Warning we are releasing hm3 of water format new if name main projectA Reservoir name Project A max storage 30 Max release 100 0 hydraulic head 600 efficiency 0 8 State ReservoirState reservoir projectA storage 10 state release 90 state inflows 0 State print stare The static trait notification signatures can be e def _release_changed self pass e de
321. sa Oklahoma City Amarillo Santa Fe Albuquerque Flagstaff and Los Angeles gt gt gt milepost Movarray 0 95 4 303 736 c7l 1175 45475 15424 Nes 1913 2446 gt gt gt distance array np abs mileposts mileposts np newaxis gt gt gt distance array array O 288 S03 bso orl tivo 14 5 1544 1913 aoe Oy 105 S33 ouo Ti day 1346 mys Lgs AO Gy Aoo 2607 ouis e ky Seal Pode 36 539 433 Op 1235 439 vV39 3909 1177 ne x Nose SOS ess O 3204 6047 673 1042 ELIT Sy GUAE 439 304 OF 00 6269 730 lA lop T2177 Li aso 604 300 OF 69 438 15944 1346 2241 02 6 37 362 6g OF 269 VOLS doy 16107 ahi O42 MOIS 4807 869 OF 2448 2250 iau o iS SD A lot of grid based or network based problems can also use broadcasting For instance if we want to compute the 3 2 Numerical operations on arrays 62 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 distance from the origin of points on a 10x10 grid we can do gt gt gt X y np arange 5 np arange 5 np newaxis gt gt gt distance Nossqre x 2 t y e 2 gt gt gt distance cues I 0 7 dj e oy 4 i dos p LAA lob eso Ie oroe Essex Sean po 2e2zo0UGCTIG s29eZeenII2 o260ogglZe sid oops t n 2a 1622 1067 62605501768 4224204069 S us 4 v Aob Gor ELTON d A 9e Ded Or in color gt gt gt Ditzwce lor distance gt gt gt ple
322. save again P IS turns OUL that Pity which knows next CTO Morning eDOoNt Nompy happily shares the same data scc 4 img save test2 png 8 3 Interoperability features 183 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 8 3 4 Array interface protocol Multidimensional buffers e Data type information present e Numpy specific approach slowly deprecated but not going away Not integrated in Python otherwise See also Documentation http docs scipy org doc numpy reference arrays interface html gt gt gt x np array l 21 137 411 gt gt gt x array interface data iho 945572 False esed PCr eA i ltvpestrE s fux475 strides None fteaDe e 2r 2y Lversion 9 73 memory address of data is readonly data type descriptor same in another form SF cHe FE strides or None if in C order gt gt gt import Image gt gt gt img Image open data test png gt gt gt img array interface adata e aiaa fanes e 200 200 4 Minty Peers Te gt gt gt x np asarray img gt gt gt x shape 200 200 4 gt gt gt x dtype dtype uint8 Note A more C friendly variant of the array interface is also defined 8 3 Interoperability features 184 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 8 4 Array siblings chararray maskedarray matrix 8 4 1 chararray vectorized string operations 4 cc
323. se case namely interac tive optimization Basically one starts out with a pure Python script and incrementally adds Cython types to the bottleneck code to optimize only those code paths that really matter In this sense it is quite similar to SWIG since the code can be autogenerated but in a sense it also quite similar to ctypes since the wrapping code can almost be written in Python While others solutions that autogenerate code can be quite difficult to debug for example SWIG Cython comes with an extension to the GNU debugger that helps debug Python Cython and C code Note The autogenerated C code uses the Python C Api Advantages Python like language for writing C extensions Autogenerated code e Supports incremental optimization ncludes a GNU debugger extension e Support for C Since version 0 13 Disadvantages Must be compiled Requires an additional library but only at build time at this problem can be overcome by shipping the generated C files 14 5 1 Example The main Cython code for our cos module is contained in the file cos module pyx UR Example CUOI wrapping OS Tunc ion Trom qol Using Cyelion TUR cdef extern from math h double cos double arg def cos_func arg return cos arg Note the additional keywords such as cdef and extern Also the cos func is then pure Python Again we can use the standard distutils module but this time we need some additional pieces from the Cvrnon
324. send will become gen __send__ The last of generator methods close 1s pretty obviously named incorrectly because it is already invoked implicitly 7 1 5 Chaining generators Note This is a preview of PEP 380 not yet implemented but accepted for Python 3 3 Let s say we are writing a generator and we want to yield a number of values generated by a second generator a subgenerator If yielding of values is the only concern this can be performed without much difficulty using a loop such as subgen some_other_generator for v in subgen yield v However if the subgenerator is to interact properly with the caller in the case of calls to send throw and close things become considerably more difficult The yield statement has to be guarded by a try except finally structure similar to the one defined in the previous section to debug the generator function Such code is provided in PEP 380 here it suffices to say that new syntax to properly yield from a subgenerator is being introduced in Python 3 3 yield from some_other_generator This behaves like the explicit loop above repeatedly yielding values from some_other_generator until it is exhausted but also forwards send throw and close to the subgenerator 7 2 Decorators Summary This amazing feature appeared in the language almost apologetically and with concern that it might not be that useful Bruce Eckel An Introduction to Python Decorators S
325. si6 yee 3sib Dey PSPSPS SS SS i xi auaqno loddo NNNNNNNEEEEEEEN uJgeMw ooo MENT HEN 2299905 M TEEEEMMNEMENN ES mg O i ces a EEE ndgpu a LULU Kopy M HEN WEE tSs O OAd MENSES HEN z e1sed Tiaqsed paned EE GNE CON uo9ug MNNNEEEST EE ogg MENS HEN Song SS ju y a c 101 4 6 Quick references CHAPTER 5 Scipy high level scientific computing authors Adrien Chauve Andre Espaze Emmanuelle Gouillart Ga l Varoquaux Ralf Gommers Scipy The scipy package contains various toolboxes dedicated to common issues in scientific computing Its different submodules correspond to different applications such as interpolation integration optimization image processing statistics special functions etc scipy can be compared to other standard scientific computing libraries such as the GSL GNU Scientific Library for C and C or Matlab s toolboxes scipy is the core package for scientific routines in Python it is meant to operate efficiently on numpy arrays so that numpy and scipy work hand in hand Before implementing a routine it is worth checking if the desired data processing is not already imple mented in Scipy As non professional programmers scientists often tend to re invent the wheel which leads to buggy non optimal difficult to share and unmaintainable code By contrast Scipy s routines are optimized and tested and should therefore be used when possibl
326. sin 3 Most of the examples especially the ones involving Numpy may still be fragile and respond badly to input errors Look for ways to crash the examples figure what the problem is and devise a potential solution Here are some ideas a Numerical overflow b Input and output arrays that have different lengths c Multidimensional array d Empty array e Arrays with non doub1e types 4 Use the t imeit Python magic to measure the execution time of the various solutions 14 8 1 Python C API 1 Modify the Numpy example such that the function takes two input arguments where the second is the preallocated output array making it similar to the other Numpy examples 2 Modify the example such that the function only takes a single input array and modifies this in place 3 Try to fix the example to use the new Numpy iterator protocol If you manage to obtain a working solution please submit a pull request on github 4 You may have noticed that the Numpy C API example is the only Numpy example that does not wrap cos doubles but instead applies the cos function directly to the elements of the Numpy array Does this have any advantages over the other techniques 5 Can you wrap cos doubles using only the Numpy C API You may need to ensure that the arrays have the correct type are one dimensional and contiguous in memory 14 8 2 Ctypes 1 Modify the Numpy example such that cos doubles func handles the preallocation fo
327. sinstance method or classinstance attribute The __init__ constructor is a special method we call with MyClass init parameters if any Now suppose we want to create a new class MasterStudent with the same methods and attributes as the previous one but with an additional internship attribute We won t copy the previous class but inherit from it gt gt gt class MasterStudent Student internship mandatory from March to June gt gt gt james Masterstudent james gt gt gt james internship Cmm vro itrom dM e c he te edam gt gt gt james set age 23 gt gt gt james age 22 The MasterStudent class inherited from the Student attributes and methods Thanks to classes and object oriented programming we can organize code with different classes corresponding to different objects we encounter an Experiment class an Image class a Flow class etc with their own methods and attributes Then we can use inheritance to consider variations around a base class and re use code Ex from a Flow base class we can create derived StokesFlow TurbulentFlow PotentialFlow etc 2 9 Object oriented programming OOP 42 CHAPTER 3 NumPy creating and manipulating numerical data authors Emmanuelle Gouillart Didrik Pinte Ga l Varoquaux and Pauli Virtanen This chapter gives an overview of Numpy the core tool for performant numerical computing with Python 3 1 The Numpy array object Section contents
328. spalel gt np Lanmspace 3 Y np meshgrid x 4 4 Other Types of Plots examples and exercises 93 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 pl contouri x Y E x XU Sv dlpha l3 cmap Jec C plocontourtXxe My Pe Vj 8 Golors black Tineaewrdth 5 Click on figure for solution 4 4 5 Imshow Hint You need to take care of the origin of the image in the imshow command and use a colorbar Starting from the code below try to reproduce the graphic on the right taking care of colormap image interpolation and origin E x yy return le 9 a x Se eS ee EE c CM 1O Nps Limspace 3 3 Noe lins pace 3 o X Y np meshgrid x ll alms tow X E Click on the figure for the solution 4 4 6 Pie Charts L D Hint You need to modify Z Starting from the code below try to reproduce the graphic on the right taking care of colors and slices size A np random u uniform 0 d Ole toe CA Click on the figure for the solution 4 4 Other Types of Plots examples and exercises 94 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 4 7 Quiver Plots ww X h 4 4 A a wu w Ww h 4 d A uo wW D X wo amp wee gp py oy Yue eer YY f FY YY YN Hint You need to draw arrows twice Starting from the code above try to reproduce the graphic on the right taking care of colors and orientations n 8 Xe Omi g
329. ssing scipy signal 118 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e scipy signal resample resample a signal to n points using FFT t np linspace 0 5 100 x np sin t plL plot t x Lin width 3 papusoeg cule Signal resample oy 90 eo 1 5 1 0 0 5 0 0 0 5 1 0 1 5 Notice how on the side of the window the resampling is less accurate and has a rippling effect e scipy signal has many window functions scipy signal hamming t0 scTpy signal bartlett solipy srgnal blackman t e scipy signal has filtering median filter scipy signal medfilt Wiener scipy signal wiener but we will discuss this in the image section 5 10 Image processing scipy ndimage The submodule dedicated to image processing in scipy is scipy ndimage 5 10 Image processing scipy ndimage 119 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Image processing routines may be sorted according to the category of processing they perform 5 10 1 Geometrical transformations on images Changing orientation resolution gt gt gt from scipy import misc gt gt gt lena misc lena gt gt gt shifted_lena ndimage shift lena 50 50 gt gt gt shifted_lena2 ndimage shift lena 50 50 mode nearest gt gt gt rotated_lena ndimage rotate lena 30 gt gt gt cropped lena lena 50 50 50 50 gt gt gt zoomed lena
330. svon a morphology dramond l ssbypeinp uinte array DIO7 07707 07 0 Op 01 0 OFAE TB LEN 7 p Or 0770 O OF 0 Qe O O O 0 O O O o ooog OmDpmb bnuosc ES c0 0 077 20 7 0 seltevpesu imue gt gt gt Erosion removes objects smaller than the structure gt gt Morpnology oinary erosion a morphology drtamond 2 sastyoe np uiancs ausos wy 20 Wy OL POUR Ote Oy Du s Qu 05 ls LOr 507 Qu 10 XU Or Ol LORS O doa Wy Xr SO eros Oy O0 Or Ox 0 0 lOe 0r 0 0 0 9 Ol 0 O OG OF 0x Qr 0g devpe urnteo Dilation maximum filter gt gt gt a npizeros 5 2 gt gt gt a 2 2 1 gt gt gt a array Il Ou 0c 0c Osy Oe Wey Oar Way Gay Oel iy Ore Oor Me ax on cade Oey Dos Oey Oey Deals d dO Op Non Oa gt gt gt morphology banary dilatwom a morphologvyvscdramomnd 0b estvpetnp us tte ades 0 0 07 07 0 EOF Oy ey 0 UM lO dg hr jo Ol 16 3 Image preprocessing enhancement 297 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 O OF ily o 0 LO Oy 0 Qv lb devbee uvmee Opening erosion dilation gt gt gt a NOs Zeros 995 Ov pesmpswnmb gt gt gt a 1 4 1 4 1 al4 4 1 gt gt gt a Sus LO D los Me ee Ss Ws DL dE URL ues qs EO ibe pues eo Os v HOS dO dre peo 2o Morphology binary Open
331. t Default 2 0 mask boolean mask array to suppress some data points mask points If supplied only one out of mask_points data point is displayed This option is usefull to reduce the number of points displayed on large datasets Must be an integer or None mode the mode of the glyphs Must be 2darrow or 2dcircle or 2dcross or 2ddash or 2ddiamond or 2dhooked_arrow or 2dsquare or 2dthick arrow or 2dthick_cross or 2dtriangle or 2dvertex or arrow or cone or cube or cylinder or point or sphere Default sphere name the name of the vtk object created representation the representation type used for the surface Must be surface or wireframe or points or mesh or fancymesh Default surface resolution The resolution of the glyph created For spheres for instance this is the number of divisions along theta and phi Must be an integer Default 8 scalars optional scalar data scale_factor scale factor of the glyphs used to represent the vertices in fancy_mesh mode Must be a float Default 0 05 scale mode the scaling mode for the glyphs vector scalar or none transparent make the opacity of the actor depend on the scalar tube radius radius of the tubes used to represent the lines in mesh mode If None simple lines are used tube sides number of sides of the tubes used to represent the lines Must be an integer
332. t gt a 77 immutable variable gt gt gt b L99 mutable variable gt gt gt e naue D Cry to modify a D Q 2 9 9o A po gt gt gt print a f gt gt gt print b SUL AAA gt gt gt print c 28 Functions have a local variable table called a local namespace The variable x only exists within the function try fo modify 2 4 Defining functions see Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 2 4 5 Global variables Variables declared outside the function can be referenced within the function In 114 In 115 def addx y return x y in 116 addx 10 Duc 4 59 x L5 But these global variables cannot be modified within the function unless declared global in the function This doesn t work In 117 def setx y x y print x is lt a In 118 setx 10 x ie 10 In 120 Cuk Es This works In 121 def setx y global x T Print 15 20 In 122 setx 10 x is 10 In 123 Cu de 2 4 6 Variable number of parameters Special forms of parameters xargs any number of positional arguments packed into a tuple e xxkwargs any number of keyword arguments packed into a dictionary In 35 def variable args xargs xkwargs print args uw5 ards print kwardgs is kwargs In 36 variable args one two x 1 y 2 z 3 args ws one two kwargo esc pte cR ctu diss iz ss mor
333. t gt gt e np array True False False True gt gt gt e dtype dtype bool Strings gt gt gt t mp array I sonjour Helco Hallo gt gt gt ey pe fp s SLeIngs Containing max 7 detters dEvpe s Much more e int32 int64 e unito e unit64 3 1 7 Basic visualization Now that we have our first data arrays we are going to visualize them Start by launching Python in pylab mode oup bom osi alb Or the notebook apyiEhon notebook pylab inline Alternatively if Python has already been started gt gt gt Spylab Or from the notebook gt gt gt Spylab inline The inline is important for the notebook so that plots are displayed in the notebook and not in a new window Matplotlib is a 2D plotting package We can import its functions as below gt gt gt import matplotlib pyplot as plt the tidy way 3 1 The Numpy array object 47 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 And then use note that you have to use show explicitly poc Dlr olor 8 line plot gt gt gt plt show lt shows the plot not needed with pylab Or if you are using pylab gt gt plot i y line plot Using import matplotlib pyplot as plt is recommended for use in scripts Whereas pylab is rec ommended for interactive exploratory work 1D plotting gt gt gt x np lrnspace 0 3 20 gt gt gt y np linspace 0
334. t gt gt integrale 6ixri5 x X 6 oo messe sqm x ox mS 15 3 Calculus 287 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e integrate log x x X xs Log x gt gt gt integrate 2 x sinh x x cosh x xx x2 Also special functions are handled easily gt gt gt integrate exp x 2 xerf x x ie 2 ert Gc 274 It is possible to compute definite integral Zo needed ieu srt m 0 oe Fimeegravelcin e EE 209 al poco integrale cosx 7 oily Sq 2 Also improper integrals are supported as well gt gt gt integrate exp x x 0 99 il gt gt gt integrate exp x 2 x oo oo pire 1 2 15 3 6 Exercises 15 4 Equation solving SymPy is able to solve algebraic equations in one and several variables In qe ls Solve tsers 4 1 x Quatre iy ol lL S As you can see it takes as first argument an expression that is supposed to be equaled to 0 It is able to solve a large part of polynomial equations and is also capable of solving multiple equations with respect to multiple variables giving a tuple as second argument m pos solvells F Sey 2 xe xui ceu Tx vi Outeiro lie ay b ce en It also has limited support for trascendental equations rwa 9 Solvetexp s pal x eue ES Er aT Another alternative in the case of polynomial equations is factor factor returns the polynomial factorized into irreducible terms and is capable of
335. t import matplotlib pyplot as plt gt gt gt plt imshow l cmap plt cm gray matplotlib image AxesImage object at 0x3c7 710 gt Increase contrast by setting min and max values gt gt gt plt imshow l cmap plt cmsgray Vvmines0 vmax 200 matplotlib image AxesImage object at 0Ox33ef750 gt gt gt Remove axes and ticks 2 Ole wes Si Ore O oy Eus Sill reu Draw contour lines poo Ole Concour L 595 20119 lt Matplorlib contour Cont our oet instance gt 10x5550c20 For fine inspection of intensity variations use interpolation nearest gt gt gt ple amshow h 2002220 77 2003220 Gm pltesem eg oy 2r pilt uumshowUcbl200 9220y 200 2201 Smapeplt cmeogrady interpolation nearest 12 2 Displaying images 232 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 100 200 300 400 12 2 Displaying images 233 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 3 D visualization Mayavi See 3D plotting with Mayavi page 324 mage plane widgets sosurfaces 12 3 Basic manipulations Images are arrays use the whole numpy machinery gt gt gt lena scipy misc lena gt gt gt lena 0 40 15616 2 gt gt 7 Slicing gt lenallo 13 20 251 arcas loc 156 157 E ue o sos die ee rcs gear Sq gt gt gt lena O00 T20 255 DU gt gt gt Ix ly lena shape pons OG CO Te OG rich prse cree
336. t print mtx 07 b OF 4 DPB SRS PrPRWNE 27 3 gt gt gt mex eZ yp ss lt 2x4 sparse matrix of type type numpy into4 with 4 stored elements in LInked List format ccm l cocensel icu asc IlO ibe 27 0l Los Ue be Oly mc mecs Oe 7 odense Mme a lah gt gt gt mtx todense Meee desc nos tq Ley 0 15 DL Le OF On MIT Dictionary of Keys Format DOK subclass of Python dict keys are row column index tuples no duplicate entries allowed values are corresponding non zero values efficient for constructing sparse matrices incrementally constructor accepts dense matrix array sparse matrix shape tuple create empty matrix efficient O 1 access to individual elements flexible slicing changing sparsity structure is efficient e can be efficiently converted to a coo matrix once constructed slow arithmetics or loops with dict iteritems use 11 2 Storage Schemes 217 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 when sparsity pattern is not known apriori or changes Examples create a DOK matrix element by element gt gt gt mtx sparse dok_matrix 5 5 dtype np float64 gt gt gt mtx 5x5 sparse Matrix ot type type numpy tloato4z with 0 stored elements in Dictionary Of Keys format gt gt gt for ir in range 5 for ic in range 5 PA muc fre seg B9 x cL i e gt gt gt mtx lt
337. t are Traits cmorows Ron ORO ow RU UR T R3 RIGS ausu om deo REHOME HO X ex 3 od EA 18 3D plotting with Mayavi 18 1 18 2 18 3 18 4 18 5 18 6 Miab the scripting interface uu 4 ea eee ud Interactive work 2 sv sos bee 9 x 9S 5X 93 39 9 9 Slicing and dicing data sources modules and filters Animating the data 99 xoxo oo RR ad Making interactive dialogs Putting it together 6244665448 eee FR GES G3 19 scikit learn machine learning in Python 19 1 192 19 3 19 4 195 19 6 19 7 Index Loading an example dataset C PISSIBCOUOIE uuu us eA eee eee we woe S S Clustering grouping observations together Dimension Reduction with Principal Component Analysis Putting it all together face recognition Linear model from regression to sparsity Model selection choosing estimators and their parameters 282 284 285 286 286 288 289 291 291 293 295 298 301 301 303 305 306 306 307 922 324 324 330 331 333 334 336 337 338 339 342 343 344 346 347 348 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Contents 1 Part I Getting started with Python for science Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 This part of the Scipy lecture notes is a self contained introduction to everything that is needed to use Python for science from the language itself to num
338. tails about objecta vobjgect also works prints More Welcome to pylab a matplotlib based Python environment For more intormatcion type help ylab Tip You can also download each of the examples and run it using regular python but you will loose interactive data manipulation S python exercice l py You can get source for each step by clicking on the corresponding figure Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 2 1 Plotting with default settings Hint Documentation plot tutorial plot command Tip Matplotlib comes with a set of default settings that allow customizing all kinds of properties You can control the defaults of almost every property in matplotlib figure size and dpi line width color and style axes axis and grid properties text and font properties and so on import pylab as pl import numpy as np X np linspace np pi np pi 256 endpoint True Cy 9 Np COS wipssmmox Ip elot x OREORE pl show 4 2 2 Instantiating defaults Hint Documentation e Customizing matplotlib In the script below we ve instantiated and commented all the figure settings that influence the appearance of the plot Tip The settings have been explicitly set to their default values but now you can interactively play with the values to explore their affect see Line properties page 99 and Line styles page 100 belo
339. tc are elementwise This works on arrays of the same size Nevertheless It s also possible to do operations on arrays of different sizes if Numpy can transform these arrays so that they all have the same size this conversion is called broadcasting The image below gives an example of broadcasting BEB YX XS E Let s verify gt gt gt 3 c npotele npiaeange 0r XO 10 43 LT gt gt gt a moo A a O array We have already used broadcasting without knowing it gt gt gt a np ones 4 5 gt gt gt a 0 2 we assign an array of dimension 0 to an array of dimension 1 gt gt gt a eure 2 sn Eee see pM ep Cup eee aye ediy 3 2 Numerical operations on arrays 61 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 An useful trick gt gt gt a np arange 0 40 10 gt gt gt a shape 4 gt gt gt a a np newaxis adds a new axis gt 2D array gt gt gt a shape Cy gt gt gt a arcay Ii 0l EOT 20 50 I gt gt gt ad b Burg c M 0 Ts zs tus IEEE ge s PaO Zl ae 9 005 celle ESO all Tip Broadcasting seems a bit magical but it is actually quite natural to use it when we want to solve a problem whose output data is an array with more dimensions than input data Worked Example Broadcasting Let s construct an array of distances in miles between cities of Route 66 Chicago Springfield Saint Louis Tul
340. ted by any subclass derived from the class The common way of creating a traits class is by extending from the HasTraits base class and defining class traits from traits api import HasTraits Str Float class Reservoir HasTraits name Str max_storage Float 17 3 What are Traits 307 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Warning For Traits 3 x users If using Traits 3 x you need to adapt the namespace of the traits packages traits api should be enthought traits api traitsui api should be enthought traits ui api Using a traits class like that is as simple as any other Python class Note that the trait value are passed using keyword arguments reservoir Reservoir name Lac de Vouglans max storage 005 17 3 1 Initialisation All the traits do have a default value that initialise the variables For example the basic python types do have the following trait equivalents ython Type Boolean Complex number Floating point number 00 Plain integer oO ong integer String MN Unicode A number of other predefined trait type do exist Array Enum Range Event Dict List Color Set Expression Code Callable Type Tuple etc Custom default values can be defined in the code from traits api import HasTraits Str Float class Reservoir HasTraits name Str max storage Float 100 reservoir Reservoir name Lac de Vouglans Complex initialisation
341. th Numpy or whatever other library 3 but would not like to have Numpy as a dependency Currently 3 solutions 1 the old buffer interface 2 the array interface 3 the new buffer interface PEP 3118 8 3 2 The old buffer protocol Only 1 D buffers No data type information C level interface PyBufferProcs tp as buffer in the type object But it s integrated into Python e g strings support it Mini exercise using PIL Python Imaging Library See also 8 3 Interoperability features 182 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 pilbuffer py gt gt gt import Image gt gt gt data np zeros 200 200 4 dtype 2np int89 gt gt gt dabeles sl 1255 0 0 255 s Red gt gt gt In PIL RGBA images consist of 32 bit integers whose bytes are RR GG BB AA gt gt gt data data view np int32 squeeze gt gt gt img e mageecremburtcer RGBA 200 200 data gt gt gt img save test png Q Check what happens if data is now modified and img saved again 8 3 3 The old buffer protocol import numpy as np import Image Let s make a sample image RGBA format x np zeros 200 200 4 dtype np int8 Zlieri 0 254 red x 3 255 opaque data x view np int32 Check that you understand why this is OK img Image frombuffer RGBA 200 200 data ImgsSsave test png Modify the original data and
342. the figure looks like Default man a number of igure fi gare fi w ize figure s size in in inches width height tidureldpi f resolion Indols pinch Tip The defaults can be specified in the resource file and will be used most of the time Only the number of the figure is frequently changed As with other objects you can set figure properties also setp or with the set_something methods When you work with the GUI you can close a figure by clicking on the x in the upper right corner But you can close a figure programmatically by calling close Depending on the argument it closes 1 the current figure no argument 2 a specific figure figure number or figure instance as argument or 3 all figures a11 as argument pl close 1 Closes figure 1 4 3 2 Subplots Tip With subplot you can arrange plots in a regular grid You need to specify the number of rows and columns and the number of the plot Note that the gridspec command is a more powerful alternative Axes 1 subplot 2 1 1 subplot 2 2 1 subplot 2 2 2 subplot 1 2 1 subplot 1 2 2 Axes 2 Axes 3 subplot 2 1 2 subplot 2 2 3 subplot 2 2 4 Axes 4 Axes 5 4 3 3 Axes Axes are very similar to subplots but allow placement of plots at any location in the fig ure So if we want to put a smaller plot inside a bigger one we do so with axes 4 3 Figures Subplots Axes and Ticks 89 Python Scientific lecture not
343. tin_ execfile filename where nome esc physique cuso python 2013 scipy lecture notes advanced debugging wiener_filffering py i oo pl matshow noisy lenal cut cmap pl cm gray 56 gt 57 denoised_lena iterated_wiener noisy_lena 58 pl matshow denoised lena cut cmap pl cm gray 59 home esc physique cuso python 2013 scipy lecture notes advanced debugging wiener fillfering py i 38 res noisy img denoised img 39 Moise Tvess 2 sum 7 tes size 40 moise level 1 noise l es Aa noise level noise level 0 0 42 denoised_img noise_levelxres FloatingPointError divide by zero encountered in divide Other ways of starting a debugger Raising an exception as a poor man break point If you find it tedious to note the line number to set a break point you can simply raise an exception at the point that you want to inspect and use IPython s debug Note that in this case you cannot step or continue the execution Debugging test failures using nosetests You can run nosetests pdb to drop in post mortem debugging on exceptions and nosetests pdb failure to inspect test failures using the debugger In addition you can use the IPython interface for the debugger in nose by installing the nose plugin ipdb plugin You can than pass ipdb and ipdb failure options to nosetests Calling the debugger explicitly Insert the following line where you want to drop in the debugger import pdb pdb s
344. tion about the objects in the image gt gt gt labels nb ndimage label mask gt gt gt nb 8 gt gt gt areas ndimage sum mask labels xrange 1 labels max 1 gt gt gt areas emia Hoi uk 4242 218e7 45927 2903 S549 424 gt gt gt maxima ndimage maximum sig labels xrange 1 labels max 1 gt gt gt maxima array b i oU 36226 11515 2 04909 Oxo od 249611818 5 10 Image processing scipy ndimage 123 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Oat esi oy 1202382207 6 765472 17 591959410791 gt gt gt ndimage find_objects labels 4 slice 30L 48L None slice 30L 48L None gt gt gt sl ndimage find_objects labels 4 gt gt gt import pylab as pl ec pl wmshow sig Si TOTI lt matplotlib image AxesImage object at gt sig mask labels See the summary exercise on mage processing application counting bubbles and unmolten grains page 132 for a more advanced example 5 11 Summary exercises on scientific computing The summary exercises use mainly Numpy Scipy and Matplotlib They provide some real life examples of scientific computing with Python Now that the basics of working with Numpy and Scipy have been introduced the interested user is invited to try these exercises 5 11 1 Maximum wind speed prediction at the Sprogo station The exercise goal is to predict the maximum wind speed occurring every 50 years even if no m
345. to it by using the set ter method All this happens when we are creating the class Afterwards when an instance of the class has been created the property object is special When the inter preter executes attribute access assignment or deletion the job is delegated to the methods of the property object To make everything crystal clear let s define a debug example gt gt gt class D object property def a self print getting 1 return 1 a setter def a self value print setting value a deleter def a self print deleting gt gt gt D a lt property object at Uc gt gt gt D a fget filmer wom a at es gt gt gt D a fset EUIS a ar Ox oc gt gt gt D a f fdel 7 2 Decorators 153 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 EUnet Von 2 at W052 gt gt gt d D varies this is not the same Y a TuUnCE LON gt gt gt d a getting 1 1 gt gt gt d a I NO setting gt gt gt del deleting gt gt gt d a getting 1 1 Q N w Properties are a bit of a stretch for the decorator syntax One of the premises of the decorator syntax that the name is not duplicated is violated but nothing better has been invented so far It is just good style to use the same name for the getter setter and deleter methods Some newer examples include e functools lru_cache memoizes an arbitrary function maintaining a limited cache of ar
346. tocal logo png logo imsave also uses an external plugin such as PIL I O also available for videos if external backends such as GStreamer or OpenCV are present gt gt gt movie io video Video video file avi gt gt gt image array movie get index frame 10 16 2 1 Data types Image ndarrays can be represented either by integers signed or unsigned or floats Careful with overflows with integer data types gt gt gt camera data camera gt gt gt camera dtype dtype Time gt gt gt camera multiply 3 camera Different integer sizes are possible 8 16 or 32 bytes signed or unsigned 16 2 Input output data types and colorspaces 294 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Warning An important if questionable skimage convention float images are supposed to lie in 1 1 in order to have comparable contrast for all float images gt gt gt camera_float util img_as_float camera gt gt gt camera max camera float max Image 255 dtype uint8 1 0 Some image processing routines need to work with float arrays and may hence output an array with a different type and the data range from the input array gt gt gt from skimage import filter gt gt gt camera_sobel filter sobel camera gt gt gt camera sobel max 59558066 70 6 7015045 Utility functions are provided in skimage util to convert both the dtype and the data range f
347. tors can either return the same function or class object or they can return a completely different object In the first case the decorator can exploit the fact that function and class objects are mutable and add attributes e g add a docstring to a class A decorator might do something useful even without modifying the object for example register the decorated class in a global registry In the second case virtually anything is possible when something different is substituted for the original function or class the new object can be completely different Nevertheless such behaviour is not the purpose of decorators they are intended to tweak the decorated object not do something unpredictable Therefore when a function is decorated by replacing it with a different function the new function usually calls the original function after doing some preparatory work Likewise when a class is decorated by replacing if with a new class the new class is usually derived from the original class When the purpose of the decorator is to do something every time like to log every call to a decorated function only the second type of decorators can be used On the other hand if the first type is sufficient it is better to use it because it is simpler 7 2 2 Decorators implemented as classes and as functions The only requirement on decorators is that they can be called with a single argument This means that decorators can be implemented as norm
348. tput steps 2 2 The Numpy part built by char types 3 Byees LOLs NEY EYTE ze Eye Of FIPS mpi Jaro w types NEV EYE type of second input arg tyres 2 e NEY BYTE A Cpe Of Third ZNDUL Arg wv PyObject xpython_ufunc PyUFunc_FromFuncAndData ucrume Loop NULLE types 1 ntypes x 2 Ye Dini neues 2 lp Ye pum oul puls 7 identity element name docstring unused e A ufunc can also support multiple different input output type combinations Making it easier 3 ufunc_loop is of very generic form and Numpy provides pre made ones PyUfunc f f float elementwise_func float input 1 PyUfunc ff ffloat elementwise func float input 1 float input 2 PyUfunc d d double elementwise func double input 1 PyUfunc dd ddouble elementwise func double input 1 double input 2 PyUfunc D D elementwise func npy cdouble xinput npy cdoublex output PyUfunc DD Delementwise func npy cdouble x inl npy cdouble xin2 npy_cdoublex out e Only elementwise func needs to be supplied e except when your elementwise function is not in one of the above forms 8 2 Universal functions 174 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 8 2 2 Exercise building an ufunc from scratch The Mandelbrot fractal is defined by the iteration ze z c where c x ty is a complex number This iteration is repeated if z stays finite no matter how long the iteration runs c belongs t
349. ture notes Release 2013 2 beta euroscipy 2013 gt gt gt mask a gt 0 5 gt gt gt opened_mask ndimage binary_opening mask gt gt gt closed_mask ndimage binary_closing opened_mask opened_mask closed_mask Exercise Check that the area of the reconstructed square is smaller than the area of the initial square The opposite would occur if the closing step was performed before the opening For gray valued images eroding resp dilating amounts to replacing a pixel by the minimal resp maximal value among pixels covered by the structuring element centered on the pixel of interest gt gt gt a np zeros 7 7 dtype np int gt gt gt all 6 1 6 3 gt gt gt a 4 4 2 alZz 3 1 gt gt gt a drugs Or X Oe SO Oe Ovo Se Gar Be Se Ops HOS OG c3 oe dig Be op 00 Oe Sprvsp Be Qe xe Uu ls Bi By By 225 27 Oly Oia 2 Soon cot Big Sie ORIS GOs SO Oe IDE Oe Qo sO gt gt gt ndimage grey_erosion a size 3 3 array LO 0 Xu 0 Wye 0 FOIS 05 705 30 70 Up 200 Oil GO Ge Wes Xie m JO NOS Ow SOR us RS es MO SONUS POr 0G a ERA a2 Gt zs Oise HOG Oi dO 0 30 9 FONS na Oo X0 xD D dO S YOu _ _ 5 10 4 Measurements on images Let us first generate a nice synthetic binary image mo x uw mp indvces 100 100 gt gt gt Sd Mossinl 2 np pil 50 Moe scin Zeno pie s lax 0g E gt gt gt mask sig gt 1 Now we look for various informa
350. turn self function xargs xxkwargs gt gt gt deco instance replacing_decorator_class foo im decorator init foo gt gt gt ideco instance def function xargs kwargs print inm function y arge kwargs im decorator call 00 gt gt gt Pine bond ily 1 ra Che wrapper T1 12 1 in ERO t ine 1IL IE a A decorator like this can do pretty much anything since it can modify the original function object and mangle the arguments call the original function or not and afterwards mangle the return value 7 2 3 Copying the docstring and other attributes of the original function When a new function is returned by the decorator to replace the original function an unfortunate consequence is that the original function name the original docstring the original argument list are lost Those attributes of the original function can partially be transplanted to the new function by setting __doc___ the docstring module and name ___ the full name of the function and annotations___ extra information about arguments and the return value of the function available in Python 3 This can be done automatically by using functools update wrapper functools update wrapper wrapper wrapped Update a wrapper function to look like the wrapped function gt gt gt import functools gt gt gt def better replacing decorator with args arg 7 2 Decorators 151 Python Scientific lecture notes Release 2013 2 beta
351. tween the importance of envisioned use cases the burden of carrying more language features consistency with the rest of the syntax and whether the proposed variant is the easiest to read write and understand This process is formalised in Python Enhancement Proposals PEPs As a result features described in this chapter were added after it was shown that they indeed solve real problems and that their use is as simple as possible Chapters contents terators generator expressions and generators page 144 terators page 144 Generator expressions page 145 Generators page 145 Bidirectional communication page 146 Chaining generators page 148 Decorators page 148 Replacing or tweaking the original object page 149 Decorators implemented as classes and as functions page 149 Copying the docstring and other attributes of the original function page 151 Examples in the standard library page 152 Deprecation of functions page 154 A while loop removing decorator page 155 A plugin registration system page 155 More examples and reading page 156 Context managers page 156 Catching exceptions page 157 Using generators to define context managers page 158 143 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 7 1 lterators generator expressions and generators 7 1 1 lterators Simplicity Duplication of effort is wasteful and replacing the various home grown
352. types during the course of a program See http www python org about for more information about distinguishing features of Python 2 1 First steps Start the Ipython shell an enhanced interactive Python shell 10 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 e by typing ipython from a Linux Mac terminal or from the Windows cmd shell or by starting the program from a menu e g in the Python x y or EPD menu if you have installed one of these scientific Python suites Tip If you don t have Ipython installed on your computer other Python shells are available such as the plain Python shell started by typing python in a terminal or the Idle interpreter However we advise to use the Ipython shell because of its enhanced features especially for interactive scientific computing Once you have started the interpreter type gt gt gt print Hello world Hello world Tip The message Hello world is then displayed You just executed your first Python instruction congratula tions To get yourself started type the following stack of instructions gt gt gt a 3 gt gt gt b 2a a gt Ey ped lt type int gt gt gt gt print b 6 gt gt gt axb 18 gt gt gt b hello mx typed Sp QT Sie gt cc O T O hellohello gt gt gt 2xb hellohello Tip Two variables a and b have been defined above Note that one does not declare the type of
353. ues with different types BEST EIC NEA ee ee gt gt gt d a 1 3 hello b 2 More container types Tuples Tuples are basically immutable lists The elements of a tuple are written between parentheses or just separated by commas Ses 1825 257r elie gt gt gt 0 12345 gt gt gt t 123457 545217 hello gt gt u Oy 2 2 2 Basic types 17 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Sets unordered unique items Soe cs Senta Spas or uisa gt gt gt S Sega amp sere p o B di trerence 7 Serle as 0j 2 2 3 Assignment operator Tip Python library reference says Assignment statements are used to re bind names to values and to modify attributes or items of mutable objects In short it works as follows simple assignment 1 an expression on the right hand side is evaluated the corresponding object is created obtained 2 a name on the left hand side is assigned or bound to the r h s object Things to note asingle object can have several names bound to it In 1 a doe 22 e eos En 2 6 a In 3 a Cibo ile 322 54 In 4 b OMe Taio ale c ail In 5 ais b OuEIS True in 6 b l hil In 7 a Orie ei qucm 3 to change a list in place use indexing slices in l1 a eZ 3 In 3 a Oue ese DER erue S In 4 a as i er 7 Creates anopher object In 5 a ou
354. ure notes Release 2013 2 beta euroscipy 2013 from mpl_toolkits mplot3d import Axes3D fig pl figure ax Axes3D fig X np arange 4 4 0 25 Y np arange 4 4 0 25 X Y np meshgrid X Y PPr Sgr Xxx H Yee np sin R N J ll gi ax plot surface X Y fStriugdesl cstride 1 cmap hot Click on figure for solution See also 3D plotting with Mayavi page 324 4 4 12 Text AQ ae pev Nes VO EHI S gl Uns A B Ld Qo A 2 9 22 FFAG wmm 1 pid s ho ul Des 1 A NY ud 7 F ym My G H r 194 L dt fn Tn fe G 1 2 __ isa 2 a4 2 2 u E mc WM ai eu pd x pe 3 Mo G y 2 7 Hint Have a look at the matplotlib logo Try to do the same from scratch Click on figure for solution 4 5 Beyond this tutorial Matplotlib benefits from extensive documentation as well as a large community of users and developpers Here are some links of interest 4 5 1 Tutorials Pyplot tutorial Introduction Controlling line properties Working with multiple figures and axes Working with text Image tutorial Startup commands Importing image data into Numpy arrays Plotting numpy arrays as images Text tutorial Text introduction Basic text commands 4 5 Beyond this tutorial 97 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 Text properties and layout Writing mathematical expressions Text renderin
355. uroscipy 2013 The first of the new methods is send value which is similar to next but passes value into the generator to be used for the value of the yield expression In fact g next and g send None are equivalent The second of the new methods is throw type value None traceback None which is equivalent to raise type value traceback at the point of the yield statement Unlike raise which immediately raises an exception from the current execution point throw first resumes the generator and only then raises the exception The word throw was picked because it is suggestive of putting the exception in another location and is associated with exceptions in other languages What happens when an exception is raised inside the generator It can be either raised explicitly or when executing some statements or it can be injected at the point of a yield statement by means of the throw method In either case such an exception propagates in the standard manner it can be intercepted by an except or finally clause or otherwise it causes the execution of the generator function to be aborted and propagates in the caller For completeness sake it s worth mentioning that generator iterators also have a close method which can be used to force a generator that would otherwise be able to provide more values to finish immediately It allows the generator del method to destroy objects holding the state of generator Let s
356. used to match objects in different images as described in http scikit image org docs dev auto_examples plot_matching html 16 7 Feature extraction for computer vision 304 CHAPTER 17 Traits building interactive dialogs author Didrik Pinte The Traits project allows you to simply add validation initialization delegation notification and a graphical user interface to Python object attributes Tip In this tutorial we will explore the Traits toolset and learn how to dramatically reduce the amount of boilerplate code you write do rapid GUI application development and understand the ideas which underly other parts of the Enthought Tool Suite Traits and the Enthought Tool Suite are open source projects licensed under a BSD style license Intended Audience Intermediate to advanced Python programmers Requirements e Python 2 6 or 2 7 www python org e Either wxPython http www wxpython org or PyQt http www riverbankcomputing co uk software pyqt htro Numpy and Scipy http www scipy org Enthought Tool Suite 3 x or higher http code enthought com projects Al required software can be obtained by installing the EPD http www enthought com products epd php Tutorial content Introduction page 306 Example page 306 e What are Traits page 307 nitialisation page 308 Validation page 308 Documentation page 309 Visualization opening a dialog page 310 Deferral page 311 Notif
357. varray The corresponding code is 9 4 Debugging segmentation faults using gdb 201 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 def make big array small array big array StrETOOG Ltrqcks ds sStrided smalt arrbray shape 2e6 2e6 strides 32 32 return big_array def print_big_array small_array big array make big array small array Thus the segfault happens when printing big array 10 The reason is simply that big array has been allocated with its end outside the program memory Note For a list of Python specific commands defined in the gdbinit read the source of this file Wrap up exercise The following script is well documented and hopefully legible It seeks to answer a problem of actual interest for numerical computing but it does not work Can you debug it Python source code to debug py 9 4 Debugging segmentation faults using gdb 202 CHAPTER 10 Optimizing code Donald Knuth Premature optimization is the root of all evil author Ga l Varoquaux This chapter deals with strategies to make Python code go faster Prerequisites line_profiler e gprof2dot dot utility from Graphviz Chapters contents Optimization workflow page 203 Profiling Python code page 204 Timeit page 204 Profiler page 204 Line profiler page 205 Running cProfile page 206 Using gprof2dot page 206 Making code go faster page 207 Algorit
358. vescipy ord Hai ird like to edit Numey Seipy docstrindgo My accoume ds XXXXX Cheers DIDI Check the style guide http docs scipy org numpy Don t be intimidated to fix a small thing just fix it e Edit 2 Edit sources and send patches as for bugs 3 Complain on the mailing list 8 6 4 Contributing features 0 Ask on mailing list if unsure where it should go 1 Write a patch add an enhancement ticket on the bug tracket 2 OR create a Git branch implementing the feature add enhancement ticket Especially for big invasive additions http projects scipy org numpy wiki GitMirror http www spheredev org wiki Git for the lazy Clone numpy repository gie clore origin sva Ua tege ce bL odo S EST SCENES ome Cit mm scummy cd numpy Create a feature branch git checkout b name of my feature branch ss E CE lt edit stuff gt Gite Commit c Create account on http github com or anywhere Create a new repository Github Push your work to github git remote add github gitG8github YOURUSERNAME YOURREPOSITORYNAME git git push github name of my reature branch 8 6 Contributing to Numpy Scipy 190 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 8 6 5 How to help in general Bug fixes always welcome What irks you most Browse the tracker Documentation work API docs improvements to docstrings Know some Scipy module well User guide
359. w Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 import pylab as pl import numpy as np Create a figure of size 8x6 points 80 dots per inch pl figure figsize 8 6 dpi 80 Create a new subplot from a grid of 1x1 Clssubplon hk db x Mp lanmsepace np oi np pec 256 endpoint True Cy cec 4 escis 6X Plot cosine with a blue continuous line of width 1 pixels eleplor x C cohort iust mem sti be dines ctm Plot sine with a green continuous line of width 1 pixels wl plOL x SG Color green limewidth 1 07 Mdinestyile oer crc T MIT ploxdiuem 4 0 40 7 Ser hu ut Pl xticks no linspace 4 4 9 enopernt Trrue Set y limits Clays ned Set y ticks pl sveteks np linspace 1 1 5 endpornt Trus Save figure using 72 dots per inch savefig exercice 2 png dpi 72 7 Snow Lesule uonuscreen pl show 4 2 3 Changing colors and line widths 0 5 103 3 2 1 0 1 2 3 4 Hint Documentation Controlling line properties e Line API Tip First step we want to have the cosine in blue and the sine in red and a slighty thicker line for both of them We ll also slightly alter the figure size to make it more horizontal pl figure figsize 10 6 dpi 80 pp c Uer qu ces ucc cm 4 2 Simple plot 84 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 lode snones S color red line
360. width 2 5 linestyle 4 2 4 Setting limits Hint Documentation e xlim command ylim command Tip Current limits of the figure are a bit too tight and we want to make some space in order to clearly see all data points pl xlim X min pbi qme see E sis 4 2 5 Setting ticks 3 142 1 571 0 000 1 571 3 142 Hint Documentation e xticks command yticks command e Tick container e Tick locating and formatting Tip Current ticks are not ideal because they do not show the interesting values 7 7 2 for sine and cosine We ll change them such that they show only these values oe Mol ciek knee popu 0 Dioxide me pde corp e OP a Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 2 6 Setting tick labels Hint Documentation Working with text e xticks command yticks command e set xticklabels set yticklabels Tip Ticks are now properly placed but their label is not very explicit We could guess that 3 142 is 7 but it would be better to make it explicit When we set tick values we can also provide a corresponding label in the second argument list Note that we ll use latex to allow for nice rendering of the label cedere sc ecici egere 2 Ors noe ei Rm CI e EHI rus ewplo quoe pis Qe Or meg pd dico pilae csi Filly ute bot muta m EST 4 2 7 Moving spines Hint Documentation e S
361. wise func float input 1 float input 2 PyUfunc d d double elementwise func double input 1 PyUfunc_dd Mouble elementwise func double input 1 double input 2 PyUfunc D D elementwise func complex double xinput complex doublex PyUfunc DD Delementwise func complex double xinl complex double xin2 PREP a doubler uth T Type codes N YABOOD NEYREY EE NEUE Ip psi pU BT SIE abro SU IE NEY LONG Ese E nS NEY IC RIS ORG ESO T NEY DOE EE NPY_LONGDOUBLE NPY_CFLOAT NPY_CDOUBLE NPY_CLONGDOUBLE NPY DATE e NEN MED EINA NERO BIET NEY SoIRING NE YAUN ICODE NEST AVOND 8 2 3 Solution building an ufunc from scratch Taa Silement ws osa FUME tom cdef void mandel_single_point double complex x z_in double complex xoc in double complex z out nogrl The Mandelbrot iteration Some points of note y IE s NOT allowed to call any Python functions here The Ufunc loop runs with the Python Global Interpreter Lock released F Hence the nogil And so all local variables must be declared with cdef Note also that this function receives x pointers to the data the traditional solution to passing complex variables around cdef double complex z z in 0 cdef double complex c c in 0 cdef int k the integer we use in the for loop Straightforward iteration for k in range 100 Z ZZ 4 ux if voreolxx2 Wage gt 1000 break Return the answer
362. wx ploplot X XY 1 cobor Dlue gt alpha 1 00 ploplot 6 Y 1l color blue alpha 1 00 Click on the figure for solution 4 4 2 Scatter Plots Hint Color is given by angle of X Y Starting from the code below try to reproduce the graphic on the right taking care of marker size color and transparency n 1024 xX No randoms normal 0 Tm Y np random normal 0 1 n pl scatter X Y Click on figure for solution 4 4 Other Types of Plots examples and exercises 92 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 4 4 3 Bar Plots Hint You need to take care of text alignment Starting from the code below try to reproduce the graphic on the right by adding labels for red bars n 12 np arange n Bl S float ms py randon unaroum 05 10 DS xX clear in ip candom amens GER Oss sO plobar tYl ftacecolor I99 LL edgecolor white pl ber X Y 2 sacecolor 4 tftt9999 edgecolor white for c yan vip x plhetext x 704 y Tt 205 ha center va bottom plc ABSENCE ou CREE Click on figure for solution 4 4 4 Contour Plots Hint You need to use the clabel command Starting from the code below try to reproduce the graphic on the right taking care of the colormap see Colormaps page 100 below def f x y return 70 Fa DT Ty a o a Tea aa M 2 256 Npelin
363. x double xinput complex double complex double m NEUEN DEOD elementwise func complex double xinl1 complex double xin2 complex doublex 22222222222222 col222llllllllllllllllllllllllllllllllllllllllllllllcc o The full list Xs aboye Type codes NPY_BOOL NPY_BYTE NPY_UBYTE NPY_SHORT NPY_USHORT NPY_INT NPY_UINT NPY LONG NPY_ULONG NPY LONGLONG NPY ULONGLONG NPY FLOAT NPY DOUBLE NPY LONGDOUBLE NPY CFLOAT NPY CDOUBLE NPY CLONGDOUBLE NPY DATETIME T NPY TIMEDELTA NPY OBJECT NEY STRING NPY_UNICODE NPY VOID Toop runc Ol S 225 ODO Suitable PYUFUNO taput our Put IE V Des TO 222 TODO TODOS rill ay roest Of Input onl DUE types T Ihis thing is passed as the data parameter for the generic r PyUbUume loop to let at know which function at should call elementwise funcs 0 void x mandel single point a Construct che fS Hc mandel PyUFunc_FromFuncAndData Loop rune elementwise funcs Emu SOM coe Sry OSes ly number of supported nput types TODO 4 Number of input args TODO number or output args 0 identity element never mind this mandel function name mandel z gt computes 2 2 k t F docstring O unused Reminder some pre made Ufunc loops 8 2 Universal functions 177 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 PyUfunc_f_f float elementwise func float input 1 PyUfunc ffj ffloat element
364. xercise Sorting Try both in place and out of place sorting Try creating arrays with different dtypes and sorting them Use all or array_equal to check the results Look at np random shuffle for a way to create sortable input quicker Combine ravel sort and reshape Look at the axis keyword for sort and rewrite the previous exercise 3 2 6 Summary What do you need to know to get started Know how to create arrays array arange ones zeros Know the shape of the array with array shape then use slicing to obtain different views of the array array 2 etc Adjust the shape of the array using reshape or flatten it with ravel Obtain a subset of the elements of an array and or modify their values with masks sos ala lt l9 ex Know miscellaneous operations on arrays such as finding the mean or max array max array mean No need to retain everything but have the reflex to search in the documentation online docs help lookfor For advanced use master the indexing with arrays of integers as well as broadcasting Know more Numpy functions to handle various array operations 3 3 More elaborate arrays Section contents More data types page 67 e Structured data types page 69 maskedarray dealing with propagation of missing data page 70 3 3 1 More data types Casting Bigger type wins in mixed type operations Poo MP array Id d opo eS aus 2 Soe ZH SN Assignment n
365. y 2 34 be Sy cole dtype np into gt gt gt y x 7 1 gt gt gt y array 6 tbid 27 lb dtype int 2 gt gt gt y strides s 8 1 Life of ndarray 168 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt y x 2 2S V array interface wi data DO 3 array intertace dataro 8 2 x Npszeros 10 10 10 dtyee np float gt gt gt Xo SCELSE SOO 60 6 22 gt a yt a strides 1600 2407 32 e Similarly transposes never make copies it just swaps strides o x np zeros l0 10 10 dtiype np tloat gt gt x3 rides 200 SU e gt gt gt SS pcdes 5v 30 300 But not all reshaping operations can be represented by playing with strides s ao 1p orang 6 cle p nen I ECCdgps9 2 gt gt gt b a T gt gt gt b strides B So far so good However gt gt gt str a data X00 0 O2 O 0405 gt gt gt b array LOG 2 Al ly 3 Sil dtiypesrntoe gt gt gt C b reshape 3 2 gt gt gt C array l0 2 e iy Sp olr chibypeseum e Here there is no way to represent the array c given one stride and the block of memory for a Therefore the reshape operation needs to make a copy here Example fake dimensions with strides Stride manipulation gt gt gt from numpy lib stride tricks import as strided gt gt gt Nelle asuse cided as_strided x shape None strides None Make an ndarray from the given a
366. yield statement doesn t have to be invoked or even reachable but causes the function to be marked as a generator When a normal function is called the instructions contained in the body start to be executed When a generator is called the execution stops before the first instruction in the body An invocation of a generator function creates a generator object adhering to the iterator protocol As with normal function invocations concurrent and recursive invocations are allowed When next is called the function is executed until the first yield Each encountered yield statement gives a value becomes the return value of next After executing the yield statement the execution of this function is suspended poo der f yield 1 yield 2 gt gt gt SEN generator object t st Oxea gt gt gt gen gt gt gt gen next 1 7 1 Iterators generator expressions and generators 145 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt gen next 2 gt gt gt gen next Traceback most recent call last prio Vasrdine line d in module StoplIteration Let s go over the life of the single invocation of the generator function gt gt gt def f Print scare yield 3 print middle yield 4 print finished gt gt gt gen f gt gt gt next gen Sa SS Wei e 3 gt gt gt next gen delle 4 gt gt gt next gen
367. ypedef struct PyArrayObject PyODjecc HEAD Block of memory char data Data type descriptor PyArray Descr xdescr Indexing scheme int nd npy intpp dimensioms npy intp xstrides Zu Other Stuff 7 PyObject xbase int flags PyObject xweakreflist PyArrayOb ject 8 1 2 Block of memory gt gt gt x NOvarray lly 2 3 4l dtypesnp rnt32 gt gt gt x data lt read write buffer for size 16 offset O at gt gt gt stri x dadta T0100 x 00 00 07 x00 x00 200 5 5 0 51 0000 00 204 00 00 3 00 Memory address of the data gt gt gt Xa iray aneertrace data J0 64803824 The whole array interface gt gt gt x array interface i Catia 359208925 False PASser a rta andy qu shape 2 45 strides None tvpestUrE gt 1 avd 5 verslon 2 3 Reminder two ndarrays may share the same memory 250 x Mp verray lle 2 Scu gt gt gt y x 1 8 1 Life of ndarray 161 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 gt gt gt x 0 9 gt gt gt y arca a Sg Memory does not need to be owned by an ndarray gt gt gt x 71234 gt gt gt y np frombuffer x dtype np int8 gt gt gt v data redd only DUPEIGFP Tor es Size OLLset 0 ac se gt gt gt y base is x Terie DO yal OS C CONTIGUOUS Truc F C ONTICUOUS gt Truc OWNDATAT S WRITEABLE False ALIGNED True DE
368. z d op X Gocsering O unused import numpy as np import mandel x np lin pace le 0 6 2000 np binspace 1i4 124 1000 x None Ljg yl None mandel mandel c c import matplotlib pyplot as plt plt imshow abs z 2 lt 1000 extent 1 pute gno 8 2 Universal functions 179 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 pce uo wA Note Most of the boilerplate could be automated by these Cython modules http wiki cython org MarkLodato CreatingUfuncs Several accepted input types E g supporting both single and double precision versions cdef void mandel single point double complex xz in double complex xc in double complex z OUt nogvxt cder void mandel single posne srngleprec tloat complex z in Float Complex AC 1i float complex Zz our cdef PyUFuncGenericFunction loop_funcs 2 Gder Char Input output types 3 2 cdef void xelementwise funcs 1 x2 loop_funcs 0 PyUFunc_DD_D input output types 0 NPY_CDOUBLE Input S ODE PU bes e NPY IDOUBINE input output type II NP DOUBLE elementwise funcs 0 lt void gt mandel_single_point loop runes i PyUPUnc Fr E MPU SOE Ute EyOcs 3 i NPY sCrLOAT iMpUue output Types 4 input SOULE PUL vpDes 5 NPY CFLOAT NPY_CFLOAT elementwise funcs 1 lt void gt mandel_single_point_singleprec mandel PyUFunc_FromFuncAndData LOOP Func elementwise funcs input LOU M UE Le yoes 2
369. ze fmin_slsqp when adding boundary constraints 5 11 Summary exercises on scientific computing 131 Python Scientific lecture notes Release 2013 2 beta euroscipy 2013 5 11 3 Image processing application counting bubbles and unmolten grains Det Spot Mag 10 4 mm 15 0 kY SSD 5 8 41x 3 25 mm MV 15 05 2009 1280 C Statement of the problem 1 Open the image file MV HFV 012 jpg and display it Browse through the keyword arguments in the docstring of imshow to display the image with the right orientation origin in the bottom left corner and not the upper left corner as for standard arrays This Scanning Element Microscopy image shows a glass sample light gray matrix with some bubbles on black and unmolten sand grains dark gray We wish to determine the fraction of the sample covered by these three phases and to estimate the typical size of sand grains and bubbles their sizes etc 2 Crop the image to remove the lower panel with measure information 3 Slightly filter the image with a median filter in order to refine its histogram Check how the histogram changes 4 Using the histogram of the filtered image determine thresholds that allow to define masks for sand pixels glass pixels and bubble pixels Other option homework write a function that determines automatically the thresholds from the minima of the histogram 5 Display an image in which the three phases are colored with three different colors 6 Us
370. zed out src lt value optimized out myfunc 0x496780 lt strided byte copy Swap 0 at inumioy Come Ssre mulitartay cCuors 6 746 TAG myf nc dit gt dataptr Gest gt strides Maxaxis As you can see right now we are in the C code of numpy We would like to know what is the Python code that triggers this segfault so we go up the stack until we hit the Python execution loop gdb up zo 0x0680d dd295 any call cunct irom Wu Frame 0x85371ec for file home varoquau usr lib python2 6 site packages numpy core arrayprin ad c EPythonycewvalscs2J50 S150 54 7 Python cevalecs No such file or directory im sa Python c eval c gdb up 9 PyEval_EvalFrameEx f Frame 0x85371ec for file home varoquau usr lib python2 6 site packages numpy core arrayprin at uw Ewthon oevalsoc2412 242 in we PytChon ceval c gdb Once we are in the Python execution loop we can use our special Python helper function For instance we can find the corresponding Python code gdb pyframe home varoquau usr lib python2 6 site packages numpy core arrayprint py 158 _leading_trailing gdb This is numpy code we need to go up until we find code that we have written gdb up gdb up 34 0x080dc97a in PyEval EvalFrameEx f Peame UxoZr064 c tem The Seqraule py dime 1 am prance Dig array s smadlesssiesye numpy ndarra 1630 a Python ceval c No such file or directory Ins 2 Pyvthon cevealse gdb pyframe Seqrauilmspy I2 print big

Download Pdf Manuals

image

Related Search

Related Contents

Cirago NuCover Pro  

Copyright © All rights reserved.
Failed to retrieve file