[PDF] Une petite référence Numpy - Pages Perso




Loading...







[PDF] NumPy Reference

12 jui 2018 · ndarray round(decimals=0, out=None) Return a with each element rounded to the given number of decimals Refer to numpy around for full 

[PDF] numpy continued - GitHub Pages

7 nov 2019 · Floating point numbers are represented in computer hardware as binary fractions plus • Many decimal fractions cannot be represented exactly as 

[PDF] Une petite référence Numpy - Pages Perso

Le module numpy est la boîte à outils indispensable pour faire du calcul floor(a) , ceil(a) , trunc(a) (troncature), round_(a,n) (arrondi à n décimales)

[PDF] Library Usage Python Concepts to Solve Exercise Problems (P_VTP4)

23 nov 2020 · Numpy is a library for the Python, adding support for large, print (around(in_array, decimals = 3)) >> [ 0 334 1 555 0 734]

[PDF] INTRODUCTION TO NUMPY - NCERT

19 juil 2019 · numpy split() splits an array along the specified axis We can either specify sequence of should be rounded to two places of decimals

[PDF] NumPy User Guide

14 jan 2022 · does what the earlier examples do, at near-C speeds, but with the code simplicity we expect from something based on Python

[PDF] Guide to NumPy - MIT

7 déc 2006 · In order to better understand the people surrounding NumPy and (its library- Round the elements of the array to the nearest decimal

[PDF] numpy/scipy array tip sheet

12 fév 2008 · Arrays are the central datatype introduced in the NumPy and SciPy packages numpy round(a, decimals=0): round elements of matrix a to 

[PDF] Mémento Python 3 pour le calcul scientifique - Arts et métiers

Entier, décimal, complexe, booléen, rien disponible ici : https://perso limsi fr/pointal/python:memento round(x,n) arrondi du float x à n

[PDF] CS 357: Numerical Methods Lecture 2: Basis and Numpy

NumPy provides a fast built-in object (ndarray) which array along each dimension a round(decimals=0) – Round to the specified number of digits

[PDF] Une petite référence Numpy - Pages Perso 19199_6www_mathprepa_fr_une_petite_reference_numpy.pdf

Unepetiteréf érenceNumpy

(miseàjourlaplus réc ente:15o ctobre 2013)

Lesnouve auxprogrammesdesCPGEscie ntifiques(rentrée2013)comporte ntunensei gnementd' informatiquepourtous,

etprév oientnotammentl'utilisationdul angagePython.

Ced ocumentfaitsuiteà"Unepe titeréférenc ePython»,dontl ave rsi onlaplusr écenteestsurmathprepa.fr

Iles tconsacré àuneprésentationassezco mpl ète(mais quinesauraitêtreexhaustive)dumodule numpy.

Cedo cumentestmisàdispositio nselonles termesdel ali cenceCreativeCommons: http://creativecommons.org/licenses/by-nc-sa/3.0/deed.fr

Unpe titmotpersonnel, ausu jetdecedocument.

J'aivou lul'écrirepourmettre mespropresidé esenplaceaus ujetde numpy.Maiscommentavoirunevued'ensemblesans

entrerdanslesdétails? Etcomment rendrecompteen unesoixantainedepagesd'uneenti tédon tlemanuelder éférence

enfait plusdemill e?

J'aifait demonmieux, avecun planqu ijel'espère "tientlaroute»,malgréun coté"catalogue »unpe uinévitable. Après

peut-êtreunelecturelinéa iredecedo cument,onpréfèrerasa nsdoutedesaccèschoisisv ialata bledes matières.J'aifait

ensort ed'accompagnerlesfonctions d'exemplessuggesti fs.Danscedocumen télectronique,l esnomsdesfonctionssont

eux-mêmesdesliens ver sladocumentation o ffi cielle(enanglais).

Pourtoutes uggestion,onpeu tmecontacteràmonadresseacadémiqu e(ci-d essous,etc'e stlab onneorthographe).

J'apprécieraitoutretour,mêmesic'es tpourme signalerdesoub lis,dese rreurs,de sfautesd'orthographe!

Lesmessage samicauxfonttoujoursplaisir,b iensûr.

Jean-MichelFerrard

Mathématiques,lycéeSaint-Louis

44Boulev ardSaint-Michel,

75006,Paris

jean-miche.ferrard@ac-paris.fr mathprepa.fr http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 1/58

Tabledesmatiè res

1Fo nctionarrayet"d ata types»5

1.1Créatio ndetableauxavecarray.........................................5

1.2Attrib utsdedimensiond'untableau .......................................5

1.3Le" datat ype» d'untableau...........................................6

1.4Copied' untableauav ecconversion de"datatype»..............................6

1.5Lesd i

ff érents"datat ypes» disponibles.....................................6

1.6T ableauxdenombrescomplexes..........................................7

2Lect ureetécrituredans unt ableau8

2.1Lectu redevaleurs dansunv ecteur,"slicing»..................................8

2.2Lecture devaleursd ansunematrice .......................................9

2.3Écritu redevaleursdans unvecteur........................................10

2.4É crituredevaleursdan sunematrice.......................................11

2.5Copiesd etableaux,"vues »surd estableaux..................................11

2.6"F ancyin dexing».................................................13

3D imensionsd'untableau15

3.1Redimen sionnementpar"reshape»ou"resize»................................15

3.2Ap latissementd'untableau............................................16

3.3T ranspositiond'unematrice............................................16

3.4Su ppressions/insertionsdelignes,decolonnes..................................16

3.5P ermutations/rotationsdelignes,decolonnes..................................17

3.6Op érationsparblocs................................................19

4T ableauxspécifiques21

4.1Tab leauxconstants.................................................21

4.2Identit é,matricesdiagonalesout riangulaires..................................22

4.3Tab leauxdevaleurséchelonnées ..........................................23

4.4Tab leauxrépondantàunef ormuledonnée....................................24

4.5Tab leauxpseudo-aléatoires............................................25

4.6Prob abilités,loisdiscrètesusuelles........................................27

4.7Prob abilités,loiscontinuesusuelles........................................29

5Fo nctionsuniverselles31

5.1Opération sarithmétiques.............................................32

5.2Fon ctionsmathématiquesusuelles.........................................32

5.3V ariantesdesyntaxe................................................33

5.4V ectorisationd'unef onction............................................34

5.5Opération slogiquessurtableauxb ooléens....................................35

5.6Op érationsbinairessurlestab leauxd'entiers..................................35

6Tes tsetcomparaiso nss urdestableaux36

6.1Compar aisonsentretableaux...........................................36

6.2Tris detableau...................................................37

6.3Min imumetmaximum...............................................38

6.4Rech erchesdansuntableau............................................39

6.5Tab leauxd'unpointdevue ensembliste.....................................41

6.6S ommes,produits, di

ff érences...........................................42

6.7Calculs statistiques,hist ogrammes........................................43

2

TABLEDESMATIÈREST ABLEDESMA TIÈRES

7Ca lculmatriciel44

7.1Opération slinéaires................................................44

7.2P roduitsmatriciels.................................................44

7.3Inversi ondematrices,résolution desyst èmes..................................46

7.4Normesmatricielles etvectorielles ........................................46

7.5V aleursetvecteursprop res............................................47

7.6Décomposition smatricielles............................................49

8Ca lculpolynomial50

8.1La classepoly1d..................................................50

8.2Lep ackage numpy.polynomial..........................................52

8.3La classe"Polynomial».............................................53

8.4Lesclasse s"Chebyshev»,etc ...........................................56

http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 3/58

TABLEDESMATIÈREST ABLEDESMA TIÈRES

Introduction

Lemo dulenumpyestla boîteàout ilsindispensablepourfair edu calculscientifiqueavecPy thon.

Pourmodéli serlesvecteurs,matrices,et plusgénér alementlestableauxàndimensions,numpyfournitletypendarray.

Ilya de sdi

ff

érencesmajeuresavecl eslistes(resp.leslistes delistes)qui pourraie ntellesaussinousse rviràreprésenter

desvect eurs(resp.desmatrices) : -Lestableaux numpysonthomogènes,c'est-à-direconstituésd'élémentsdumêmetype.

Ontrouv eradoncdestableau xd'entiers,de stableauxdeflottan ts,destableauxde chaînesdecaractères,etc.

-Latailled es tableauxnumpyestfixée àlacréat ion.O nnepeutdoncaugmen teroudiminuerlatail led'untabl eau

commele feraitpourune liste(àmoins decréeruntout nouveaut ableau,biensûr).

Cescont raintessontenfaitdesavantages:

-Leformat d'untableau numpyetla tailledes objetsquilecomposentétantfixés, l' empreintedutableau enmémoire

estin variableetl'accèsàsesélémentssefaitentemps const ant.

-Lesopérati onssurlestableauxsontoptimiséese nfonctiondu typedes éléments,etsontb eaucoupplus rapidesqu'elles

nele seraientsur deslisteséquivalentes. Traditionnellement,onchargelatotalitédumodulenumpy,maisenlerenommantennp,delamanièresuivante: >>>import numpyas np >>> Lesfonction sdenumpysontalors accessiblesparleurnomquali fié"np.nom_de_la_fonction». Important:danstoutelasuite,onsupposeraquelemodulenumpyaétéimportédecettemanière.

Quandonévoque ralaf onction"array»parexemple,onpenseratoujoursàl'utiliseraveclasyntaxe"np.array»

Onne chargerajam aisnumpypar"fromnumpyi mport*»:lenombredefonctionsimportéesesteneffettropimportant,

etav ecluilerisque d'homonymiea veclesdéfini tionsdéjàprésentesaumomentde l'importation. http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 4/58

Chapitre1

Fonctionarrayet"d atat ypes»

1.1Créati ondetableauxavecarray

Onutilis eengénérallaf onctionarraypourforme runtableauàpartird elali ste(oulalistedesliste s)d eseséléments.

Dansl'exe mpleci-dessous,onformeune matriceaàcoefficientsentiers,àtroislignesetquatrecolonnes,àpartird'une

listedetroiss ous-listes delon gueurquatre.

Lafon ctionarrayagitcommeu nmécanisme de

conversionvers'numpy.ndarray'quiestle type communàtousl establ eauxnumpy.

Onne confondra pasaveclerésultatrenvoyép ar

l'attributdtype(abréviationdedatatype )dea, etq uiindiquel etypecommunàtousles éléments decelui -ci(enl'occurrence desentiers codéssur32 bits,c'est-à-dire quatreoctetsoubytes). >>>a= np.array([[8,3,2,4],[5,1,6,0],[9,7,4,1]]); a array([[8,3,2, 4], [5,1,6, 0], [9,7,4, 1]]) >>>type(a) >>>a.dtype dtype('int32')

Remarque:laméthodetolistd'untablea unumpyletrans formeenlaliste(éven tuellement un elistedelistes) deses

éléments.Attention,ce c'estpasunefonctiondumodul enumpy.Onn'écriradoncpasnp.tolist(a)maisa.tolist()

>>>a= np.arange(15).reshape(3,5);a array([[0,1, 2,3,4], [5,6,7 ,8,9], [10,11,12, 13,14]]) >>>b =a.tolist();b #convertitaenunelist ede listes [[0,1,2, 3,4],[5, 6,7, 8,9],[10, 11,12,13, 14]] >>>c= np.array(b)# retourtableau >>>c array([[0,1, 2,3,4], [5,6,7, 8,9], [10,11,12 ,13,14]])

1.2Attri butsdedimensiond'untableau

Voiciquelque sattributsdedimensiondes tableauxnumpy (lesexemple ss'appuientsurladéfi nitionprécédentedea). -shapeindiqueleformatduta bleau,souslaformedutupledu nombred' élémentsdans chaquedirection: icilecouple(3,4)indiquequ'ilyatroisligne setquatrec olonne s. -lafonctionalen(cen'es tpasunattribut)donnelapremièredimensiond'untableau(la taillep ourunvecteu r,lenombre delignespourunematrice). -sizedonnelenom bret otald'éléments,etpar exemplenppourunemat ricedetype n×p.Ici notret ableauacontient12éléments. variante:np.size(a,0)etnp.size(a,1)donnentrespectivemen tlenombredeligneset lenom bredecolonnesd'un ematrice. -ndimrenvoielenombred'in dice snécessairesauparc oursdutableau(usuellement: 1 pourunvect eur,2po urunematrice). >>>a.shape (3,4) >>>np.alen(a) 3 >>>a.size 12 >>>np.size(a,0) 3 >>>np.size(a,1) 4 >>>a.ndim 2

Lesfonction sshape,size,etndimpeuventêtreévoquée sàlafoiscomm edesattributsd'untabl eauetcommedes

fonctionsdumodul enumpyprenantuntableauen arg ument.Pourprendrel'exemplede shape,onpeutdoncécrireaussi

bien"a.shape»que"np.shape(a)». 5

1.3Le" datat ype» d'untableauChapitre1:Fonctionarrayet"dat aty pes»

1.3Le"da tatype »d'un tableau

Ledatatype estautomat iquementchoisiparla

fonctionarrayauvud esco efficients. Enmodi fiantàpeinel'exempleprécéde nt, ilsu ffi t d'unseulflott ant (onachangé4en4.0)pourque letab leautoutentiersoitcon sidérécomme formé deflot tants(icicodéssur64bits). >>>b= np.array([[8,3,2,4],[5,1,6,0],[9,7,4.0,1 ]]);b array([[8.,3., 2.,4.], [5.,1.,6. ,0.], [9.,7.,4., 1.]]) >>>b.dtype dtype('float64')

Iles ttoujours possibledeforcerledatatype duta bleauavecl'optiondtypedela fonction array(àcon ditiondefaire

duupcasting,c'est-à-diredeforcerletypage"verslehaut»,basésurlesinclusionsstrictesZ?R?C). Dansl'exemp lesuivant,onforcelac réationd'untableaudenombre scomp lexes,alorsquela nature descoe ffi cientsdevait conduireàundatatype entier(onauraitpuaussi bienremplacer8par8+0j,parexemple): >>>c= np.array([[8,3,2,4],[5,1,6,0],[9,7,4,1]], dtype=complex);c array([[8.+0.j,3.+0.j, 2.+0.j,4.+0.j], [5.+0.j,1.+0.j,6.+0.j, 0.+0.j], [9.+0.j,7.+0.j,4.+0.j, 1.+0.j]]) >>>c.dtype dtype('complex128')

1.4Copied'un tableauaveccon version de"datatype»

Onpe utcréerunecopie d'untableaud'undatatype àunautreenutilisantsaméthodeastype.

Pourillust rercespossibilitésonrepren dlesdéfini tionsprécédentesdea(dtype=int),b(dtype=float)etc(dtype=complex).

Onretie ndraquelaméthodeastypecréeunecopieduta bleau(doncn'affectepasle contenu delavar iable).

>>>a.astype(fl oat) array([[0.,1., 2.,3.,4.], [5.,6.,7., 8.,9.], [10.,11.,12. ,13., 14.]]) >>>b.astype(int) array([[8,3,2, 4], [5,1,6, 0], [9,7,4, 1]]) >>>c.astype(float) array([[8.,3., 2.,4.], [5.,1.,6., 0.], [9.,7.,4., 1.]]) e ff ectueunecopiedu tableau aeffectueunecopiedu tableau beffectueunecopiedu tableau c enconv ertissantversletypefloatenconverti ssantverslet ypeint enconvertissantversl ety pe float

Untable aunumpyoccupeuneplaceco nstanteen mémoire,égalea uproduitdunombredesesélémen tsparl ataille(fixe)

d'unélémentdu datatype (enprincip e:4octetspourunentie r,8 pour unflottant,16pourunn ombrecomplexe).

Lesattributsitemsizeetnbytesd'untablea unumpy

donnentlatail led'unélémen tdutableauetlataillet otale decelui -ci(expriméeseno ctets). Enré utilisantnostableauxa,b,c,onafficheicilesvaleurs desat tributsitemsize(tailled 'unélément),pu issize(le nombred'éléments)puisnbytes(tailletotale). unoct et=uncaractèr e=un byte=8bits. >>>(a.itemsize, a.size,a.nbytes) (4,15,60) >>>(b.itemsize,b.size, b.nbytes) (8,12, 96) >>>(c.itemsize,c.size, c.nbytes) (16,12,192 )

1.5Lesdi

ff

érents"datatyp es»di sponibles

Lesélém entsd'untableaunumpyparticuliersontdumêmetype,etona vulestypes suiv ant s:int,floatetcomplex.

Enfai tilyad'autr esty pesp ossibl esetenvoicilaliste: bool:booléen(TrueouFalse),codésurunoctet int:entier,équivalentdeint32oude int64,suivantlesimplémentations int8:entiersignésur1octet(8bits),intervalle?-2 7 ,2 7 -1?=?-128,127? int16:entiersignésur2octets(16bits),intervalle?-2 15 ,2 15 -1?=?-32768,32767? int32:entiersignésur4octects(32bits),intervalle?-2 31
,2 31
-1?=?-2147483648,2147483647? int64:entiersigné,8octets(64bits),intervalle?-2 63
,2 63
-1?=?-9223372036854775808,9223372036854775807? uint8:entiernonsigné,1octet(8bits),intervalle?0,2 8 -1?=?0,255? http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 6/58

1.6Tab leauxdenombrescomplexesChapitre1:Fonctionarrayet" datat ypes»

uint16:entiernonsigné,2octets(16bits),intervalle?0,2 16 -1?=?0,65535? uint32:entiernonsigné,4octets(32bits),intervalle?0,2 32
-1?=?0,4294967295? uint64:entiernonsigné,8octets(64bits),intervalle?0,2 64
-1?=?0,18446744073709551615? float:synonymedefloat64 float16:flottantendemi-précision(unbitdesigne,5bitsd'exposant,10bitsdemantisse) float32:flottantensimple-précision(unbitdesigne,8bitsd'exposant,23bitsdemantisse) float64:flottantendouble-précision(unbitdesigne,11bitsd'exposant,52bitsdemantisse) complex:synonymedecomplex128 complex64:nombrecomplexesur64bits(32bitspourlapartieréelle,32bitspourlapartieimaginaire) complex128:nombrecomplexesur128bits(64bitspourlapartieréelle,64bitspourlapartieimaginaire)

Onpe utaussiformerde stableauxdechaîne sdecaractèresdontla longueurn'excè depasunevaleur donnée:

>>>np.array(("12 3",'abcbde',"12XY5"))#vecteurdechaînesde caractèresunicode,pos maxi <6 array(['123','abcbde', '12XY5'], dtype='1.6Tableaux denombrescomplexes

Lesméthod esrealetimagpermettentdesépareruntableau numpydenom brescomplexesensaparti eréelleetsa

partieimaginaire.On obtientletableauconjuguédeaenév aluanta.conj()ounp.conj(a) Demême ,onformeletableau des modules (resp .desarguments)parabs(a)etangle(a). Voiciparexem pleunemat ricez,deformat2×4,constituéedenombrescomplexes. >>>z =np.array([[1j,1+1j,2-3j,4-1j],[2j,3-1j,2 +2j,1+5j]]);z array([[0.+1.j,1.+1.j, 2.-3.j,4.-1.j], [0.+2.j,3.-1.j,2.+2.j, 1.+5.j]])

Dansl'exemple suivant,onmetlapartie réelle(resp.imaginaire)dutable auzdanslet ableaux(resp.y).Onv oitcomme nt

l'expressionx+1j*ypermetdereconst ituerl etableaucomplexeinitial.Lesfonction squiag issentainsitermeàter mesur

lesélémen tsd'untableauserontétudié esdanslech apitre"Fonctionsu niverselles». >>>x =z.real;x array([[0.,1., 2.,4.], [0.,3.,2. ,1.]]) >>>y= z.imag;y array([[1., 1.,-3.,-1.], [2.,-1.,2.,5.]]) >>>x+ y*1j array([[0.+1.j,1.+1.j, 2.-3.j,4.-1.j], [0.+2.j,3.-1.j,2.+2.j ,1.+5.j]]) >>>z.conj() array([[0.-1.j,1.-1.j, 2.+3.j,4.+1.j], [0.-2.j,3.+1.j,2.-2.j, 1.-5.j]]) http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 7/58

Chapitre2

Lectureetécritured ans untablea u

2.1Lecture devaleursdansunvecteur," sli cing»

Lalec tured'élémentsd'untab leaunumpyprocèdeparcoupes("slices»enanglais)suivantun eouéve ntuellementplu sieurs

desdimen sionsdutableau.C'estcemécanism equies tàl'oeuvredansl'accès(en lectureeten écritu re)auxélémentsd'une

liste(oud'un eliste deliste).Voirladocic i:http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html

Unecoup eestunmécanismed esélectiondep ositionsrégu lièrementespacéesdan suninterv alleI=?0,p-1?.

Lasp écificationlaplusgénéraled'unecoup ees tdébut(inclus):fin(exclue):incrémentetdésigne lespositi onsdeI

àpartirdelavaleurdedébut(incluse),parincrémentationssuc cessiv estantqu'onrestedansl'intervalledéfini parles

valeursdedébutetdefin(cettedernièreé tantexclue:trèsimportant). Lespositions acceptéesparl'interp réteurPythonformentenfaitl'in terv alleI ? =?-p,...,-2,-1,0,1,2,...,p-1?etell es sontconvert ies"modulop»enunepositioneffectivedansI=?0,p-1?.

L'intérêtdecetteexte nsionsyntaxiqu eestquelesp ositionsnégativessucces sives-1,-2,...,quisontconvertiesenles

positionsp-1,p-2,...(oùpreprésentelalongueurduvecteur v)permettentdelirelesélémentsdevàpartirdelafin.

Pardéf aut,lapositiondedébut (incl use)est0etlapositiondefin (excl ue)estlalongueu rpdeIdoncdev.

Pardéfa utégalement,lavale urd'incrémentationest1.

Commeçaparai tunpeu compliquédeprimea bord,o nvaprendr equelquesexemples,d'abords urunv ecteur.

Onch oisiticideformerlev ecteurv,delongueurp=16,telquev[k]=10 kpourkdansI=?0,15?. >>>v =np.array(range(0,160,10)); v array([0, 10,20,30, 40,50,60, 70,80,90, 100,110,120, 130,140, 150]) Oncom menceparliredesélémentsindividu elsdans leve cteurv. >>>v[0] #le1er élément 0 >>>v[1]# le2ièmeélément 10 >>>v[2]# le3ièmeélément 20 >>>v[-1]# ledernierélément 150
>>>v[-2] #l'avant-dernier 140
>>>v[-3]# l'avant-avant-dernier 130
>>>v[v.size-1]# ledernier 150
>>>v[-16]# lepremier 0 >>>v[-v.size]# lepremier 0

icioncompte àpartir dudébutici oncomp teàpartird elafinform ulationspeuclaires:àéviter

Oncon tinue,aveclemêmevecteu rv,eneffectuantquelquescoupesdevaleursconsécutivesdansl'ordredesindices

croissants,c'est-à-direavecla valeur1d'incrémentationpa rdéfaut: >>>v[4:11]# dev[4]à v[10],donc11-4 =7éléments consécutifs array([40,50, 60,70,80, 90,100]) >>>v[:6]# dev[0]à v[5],les6 premièresvaleurs dev array([0, 10,20, 30,40,50]) >>>v[6:] #(vétan tdelongueur p=16),dev[6] àv[p-1],lesp-6=10 dernièresvaleurs dev array([60,70, 80,90, 100,110, 120,130,140, 150]) >>>v[:]# latotalitédu vecteurv,c ommesion avaitécritv[0:p] array([0,10, 20,30,40, 50,60,70, 80,90,100, 110,120, 130,140, 150]) 8

2.2Lecture devaleursd ansunematrice Chapitre2:Lectureetécritured ansuntable au

Voicimaintena ntdescoupesd'élémentsconsécut ifs,mais àl'envers,ettoujou rsaveclemêmevecteurv:

>>>v[11:4:-1] #dev[11 ]àv[5], donc|4-11|= 7éléments array([110,100, 90,80,70, 60,50]) >>>v[:6:-1]# dev[p-1=15]à v[7],donc|6-15| =9éléments array([150,140, 130,120,110, 100,90,80, 70]) >>>v[6::-1]# dev[6]à v[0],donc7 éléments array([60,50,40, 30,20, 10,0]) >>>v[::-1]# latotalitédu vecteur,mais àl'envers array([150,140,130, 120,110,100, 90,80,70, 60,50,40, 30,20, 10,0]) Etpo urfinir,descoupes dumêmevecteurv,maisavecunincrémentdifférentde1ou-1: >>>v[::4] array([0, 40,80,120]) >>>v[1::4] array([10,50, 90,130]) >>>v[::5] array([0,50, 100,150]) >>>v[:6:2] array([0,20, 40]) >>>v[:7:2] array([0,20, 40,60]) >>>v[10::2] array([100,120, 140]) >>>v[:5:-3] array([150,120,90, 60]) >>>v[:6:-3] array([150,120,90]) >>>v[6::-3] array([60,30,0])

2.2Lecturede valeursdansunematric e

Onpro cèdecommedanslasous-sec tionprécédente, ene ff ectuantunecoupesuiv antlapremière et/ousuivantladeuxiè me dimension(çasegénérali sebiensûrà desta bleauxdetroisdimensionsoupl us).

Onse contente radequelques

exemplesaveccett ematricem d'ordre5×8,determegénéral m[i,j]=10 i+j(ennumérotan t lignesetcolonn esàpartird e0): >>>m= np.array([[10*i+jfor jinrange(8)] foriinrange(5)]);m array([[0,1, 2,3,4, 5,6,7] , [10,11,12, 13,14,15, 16,17], [20,21,22, 23,24,25, 26,27], [30,31,32, 33,34,35, 36,37], [40,41,42, 43,44,45, 46,47]]) >>>m[3,5] 35
>>>m[3] array([30,31,32, 33,34,35, 36,37]) >>>m[:,5] array([5,1 5,25,35, 45]) élémentenposition (3,5) vecteur-ligneenposition3v ecteur-colonne enposition5 >>>m[1:4,2:6] array([[12,13,14, 15], [22,23,24, 25], [32,33,34, 35]]) >>>m[1::2,1::2 ] array([[11,13,15, 17], [31,33, 35,37]]) >>>m[::2,::2] array([[0,2, 4,6], [20,22, 24,26], [40,42,44 ,46]]) lignes1à3,colon nes 2à5 lignes etcolonnesimpaireslignese tcolon nes paires >>>m[:3,:2] array([[0,1], [10,11], [20,21]]) >>>m[2:,4:] array([[24,25,26, 27], [34,35, 36,37], [44,45,4 6,47]]) >>>m[::2,::3] array([[0,3, 6], [20,23,26 ], [40,43,46 ]]) troispre mièreslignesàpartirdelaligne 2unelignesur deu x deuxpr emièrescolonnesàparti rdelacolonne4unecol onne surtrois >>>m[::-1] array([[40,41,42, 43,44,45, 46,47], [30,31,32, 33,34,35, 36,37], [20,21,22, 23,24,25, 26,27], [10,11,12, 13,14,15, 16,17], [0,1,2, 3,4,5, 6,7]]) >>>m[:,::-1] array([[7,6, 5,4,3, 2,1,0] , [17,16,15 ,14,13, 12,11,10], [27,26,25 ,24,23, 22,21,20], [37,36,35 ,34,33, 32,31,30], [47,46,45 ,44,43, 42,41,40]]) oninv ersel'ordredeslignesonin versel'ordre descolonnes http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 9/58

2.3Écritu redevaleursdans unvecteurChapitre2:Lectureetécrituredan suntableau

2.3Écritur edevaleursdansunvecteur

Siaestunv ecteurnumpyl'instruction"a[n]=x»écritlavaleurxenposi tionn. >>>a =np.arange(10); a#le vecteurdesentiersde0 à9 array([0,1,2, 3,4,5, 6,7,8, 9]) >>>a[7]= 999#écrit lavaleur999 enposition7 >>>a #affichele nouveaucontenude a array([0,1, 2,3,4, 5,6, 999,8,9]) Lavale urxécriteenpositionnduvect euradoitapriori être compatibleavecle"data type»dea.

Sion écritunen tierxdansuntabl eau adeflot tants,pasdeproblème(xestconv ertienleflottantcorrespondan t).

Maissionécrit unflo ttantxdansuntabl eauad'entiers,alorsxestconv ertienunentier(partroncatur e,paspar

arrondi)pourl'écriture: iln'yadoncpas demessaged 'erreur,n imême d'avertissement.Le "data type»etl'adressed u

tableauanecha ngentpas.

L'idéefondamentale aveclestableauxnumpyestque leur"data type»etleurt aill e(lenom bretotald'éléments)sont

fixéslors deleurcréation.Parso ucid'e ffi cacitéetd'économie,Pythonlimitelac réationd ecopiesdutable auinitial,et doncprivi légielesopérationsréalisées"enpla ce».

Dansl'exemple ci-dessous,onvoit quel'instructiona[5]=12.99(oùaestunt ableau d'entiers)aété traduiteena[5]=12:

l'opérationaétée ff ectuée"enplace»(l'adres sed utableaue nmémoiren'apasch angé). >>>a =np.arange(10); >>>a,id(a) #demandele contenudu tableaua,etsonadresse (array([0,1, 2,3,4, 5,6,7, 8,9]),3957296) >>>a[5]= 12.99#on essaied'écrirele flottant12.99 enposition5 >>>a,id(a) #enfait, onaécr it12,et l'adressedeaestinchangée (array([0,1, 2,3,4, 12,6,7, 8,9]),3957296)

Onp eutécrireplusieurs valeurssimultané mentdansunvecteur,en utilisantunesyntaxedu genrea[coupe]=....Ilf au t

simplementveilleràce quelemembrededroite(lasour ce)soit "arr ay-like »(unelist e,untuple,untableau)etq uela coupe

spécifiéea(donclacible)s oient demêmetaille.Ainsi,dans l'exempleci-dessou s,lesins tructionsa[4:7]=[111,222,333],

a[4:7]=(111,222,333)ouencore a[4:7]=np.array([111,222,333])ontlemêmeeffet: >>>a =np.arange(10); a array([0,1,2, 3,4, 5,6,7, 8,9]) >>>a[4:7]= [111,222,333];a# place111,222, 333enpositions respectives4,5, 6 array([0,1,2, 3,111,222, 333,7, 8,9])

L'exemplesuivantest peut-êtremoinsévident.On commenceparforme runvecteurnuldelongueu r10(ave cledatatype

pardéfaut,do ncfloat),puiso névaluel 'instructiona[::2]= np.arange(1,6).Onaffectedoncrespectivementlescinq

valeursdutableauarray([1,2,3 ,4,5]) auxpositionsp airesdutableaua. >>>a =np.zeros(10); a,id(a)# unvecteurde10flottants égauxà0, etsonadresse (array([0., 0.,0.,0., 0.,0.,0., 0.,0.,0.]), 19048976) >>>a[::2]= np.arange(1,6);a #place 1,2,3,4,5auxpositions 0,2,4,6,8.Adresseinchangé e (array([1.,0., 2.,0.,3., 0.,4.,0., 5.,0.]),1904 8976) Autreexemple unpeutordu,oncopie levecte uraàl'enverssurlui-même: >>>a= np.arange(10);a array([0,1,2, 3,4,5, 6,7,8, 9]) >>>a[::-1]= a;a array([9,8, 7,6,5, 4,3,2, 1,0]) http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 10/58

2.4Écritu redevaleursdans unematriceChapitre2:Lectureetécritured ansuntable au

2.4Écritur edevaleursdansunematrice

Onpro cèdecommepourlesvecteu rs,indiceparindic e.

Commençonsparl'écritured'un coe

ffi cient: >>>m array([[0,1, 2,3], [10,11,12, 13], [20,21,22, 23]]) >>>m[1,2] =999;m array([[0,1, 2,3], [10,11,999 ,13], [20,21,22, 23]])

Continuonsparl'écritured'un eligneent ière:

>>>m array([[0,1, 2,3], [10,11,12, 13], [20,21,22, 23]]) >>>m[2] =[6,7, 8,9];m array([[0, 1,2,3], [10,11,12 ,13], [6,7,8, 9]]) Terminonsparl'écritured' unecolonn eentière.

Notonsqu'onpou rraitici,eta veclemêmee

ff et,remplac erletuple(444,555,666)parlali ste[444,555,666],oupar

leve cteurnp.array([444,555,666]),ouparlamatrice-lignenp.array([[444,555,666]])mais(bizarr ement)paspar

lamatrice -colonnenp.array([[444],[ 555],[666]]). >>>m array([[0,1, 2,3], [10,11,12, 13], [20,21,22, 23]]) >>>m[:,1] =[444,555, 666];m array([[0, 444,2,3], [10,555,12,13], [20,666,22,23]])

Ilya éno rmé mentdepossibilités,maisendeho rsdes troisprécédentes,ilfautvraimentenavoir l'utilité.

Justepourrévis erunpeul'utilis ationdecoupesàl'env ers::-1,citonslesexemplessuivants: >>>m array([[0,1, 2,3], [10,11,12, 13], [20,21,22, 23]]) >>>m[::-1] =m;m array([[20,21,22, 23], [10,11, 12,13], [0,1,2, 3]]) >>>m[:,::-1]= m;m array([[23,22, 21,20], [13,12,11 ,10], [3,2,1 ,0]]) ona inversé l'ordredeslignespuis inversél'ordred escolonn es

2.5Copiesde tableaux,"vues»sur desta bleaux

Lemod ulenumpypermetdetravaill erefficacementsurdestableauxpo ssédantun nombrefixé d'éléments,ceux-ciayant

unty pedonné.Toutcelasepa sseàl'ini tialisatio ndutabl eau. Aveccestab leaux,ona ppliquedoncunprinciped'éco nomie quiconsisteàe ff ectueraussipeuquep ossiblederecop iesde tableauxenmémoire,sauf demandee xplicite.Toutd épenddelaf onctionutiliséesurletableau .

L'exemplesuivantes ttrèsimportant(parcequelasituation évoquéeicire vientsou vent).Levecte uracontenantun

tableaunumpy,lavariableapointeenfaitsur laposit iondecetable auenmémo ire.L' instructionb=anecrée pasune

nouvellecopiedutableaua,maiselledemandeàlavariablebdepo intersurlemêmetableauphysique quea.

One xprimecettesituationend isantqueaetbconstituentunemêmevue("view »in engli sh)d'untableau numpy.

Lacon séquenceimmédiateestquetoutemodificationapporté eàcettevue(queces oitparl'intermé diairedelav ariable

aoude lavariableb)affecteceque"voient»etaetb.Ici ,parexemp le,aprèsa voirposéb=a,l'instructionb[2,1]=9

modifieletableauvupar b,c'est-à-direletableauvupara.C' estconfirméqu andonévaluelesexpres sionsid(a)et

id(b)quidonne ntunrésultatidentique(l'adresse decequ evoientaetb). >>>a array([[0,1, 2,3], [10,11,12,13], [20,21,22,23]]) >>>b =a >>>b[2,1]= 9;b array([[0, 1,2,3], [10,11,12,13], [20,9,22,23]]) >>>a array([[0,1 ,2,3], [10,11,12,13], [20,9,22,23]]) >>>id(a)

19127280

>>>id(b)

19127280

onmod ifieb[2,1]lamod ifications'estc'estnormalc araetb dansleta bleaubrépercutéesurapartagentunemêmevue

Iles tbiensûrp ossiblede"d éconnecte r»complètementlestablea uxvusr esp ectivementpardeuxidentificateurs .

L'expressiona.copy()renvoieunecopie" neuve»dutab leaua,indépendantedel'original. http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 11/58

2.5Copiesd etableaux,"vues »surd estableauxChapitre2:Lectureetécrituredan suntableau

>>>a array([[0,1, 2,3], [10,11,12,13], [20,21,22,23]]) >>>b =a.copy() >>>b[2,1]= 9;b array([[0, 1,2,3], [10,11,12,13], [20,9,22,23]]) >>>a array([[0,1, 2,3], [10,11,12,13], [20,21,22,23]]) >>>id(a)

19134464

>>>id(b)

19096112

onmod ifieb[2,1]lamod ificationnes'estnormalcaraetbne dansleta bleaubparrépercut éesurapartagentpaslamêmevue L'exemplesuivantest beaucoupplussubtile tintéressante tinstructif! Audé part,letableauacontient(enfait,"ilvoi t»)unematri ced'entiersde typ e5×8. Ensuiteonextra itunesous-ma tricebdea(aumoy end'unecoupese lonchacundesde uxindices).

Ondé cideensuited'annulerle sélémentsdeb(aveclaméthodefill,exposéeplusloin,etquitravaille"enplace»).

Onde mandeensuitelenouveauconte nudeb(c'est-à-direcequevoitb),et lerésultatn 'est passurprenant.

>>>a array([[0,1, 2,3,4, 5,6,7 ], [10,11,12, 13,14,15, 16,17], [20,21,22, 23,24,25, 26,27], [30,31,32, 33,34,35, 36,37], [40,41,42, 43,44,45, 46,47]]) >>>b= a[1:4,2:6] >>>b array([[12,13,14, 15], [22,23,24, 25], [32,33,34, 35]]) >>>b.fill(0) >>>b array([[0,0,0, 0], [0,0,0, 0], [0,0,0, 0]]) lamatrice ainitialeonen extraitu nesous- matricebonann ulelescoefficientsdeb

Cequ iestplusi nattendu ,c'estquetou slescoe

ffi cientsdeaetqui correspondantà l'empruntquenousavonsfaitp our

créerbsontann uléseuxaussi!çaseconfirmeaprèsl 'inst ructionb.fill(1)quiremplit decoefficientségauxà1letable au

vupar b,c'est-à-direlasous-matricedeacorrespondandàladéfinitionde b. >>>a array([[0,1, 2,3,4, 5,6,7 ], [10,11,0, 0,0,0, 16,17], [20,21,0, 0,0,0, 26,27], [30,31,0, 0,0,0, 36,37], [40,41,42, 43,44,45, 46,47]]) >>>b.fill(1);a array([[0,1, 2,3, 4,5,6, 7], [10,11,1, 1,1,1, 16,17], [20,21,1, 1,1,1, 26,27], [30,31,1, 1,1,1, 36,37], [40,41,42 ,43,44, 45,46,47]]) annulerb,c'estannulerunevuec'estlamêmechoseenremplissantlamatric eb surla partiedut ableauadontbestissue decoefficientségauxà1

Important:onretiendradoncquelireunecouped'untableaunumpya,çan'estpascréerunnouveautableau,c'est

renvoyerune"vue»surunsou s-tableaudea.

Sion reprendl'ex empleprécédent,le tableauaestenq uelque sortelepèredeb.Letermeexactestlabasedeb.D'ailleurs

laméth odebaseduta bleaubrenvoieunevuesur letableaua.

Iles tintéress antdevoirquemodifiera,c'estégalementmodifierb(exempleci-dessous ).Lelienentrelesdeuxtableaux

aetbestdoncà double sens(c' estnormal:il spart agentunemêmezonededonnées): >>>b.base array([[0,1, 2,3,4, 5,6,7 ], [10,11,1, 1,1,1, 16,17], [20,21,1, 1,1,1, 26,27], [30,31,1, 1,1,1, 36,37], [40,41,42, 43,44,45, 46,47]]) >>>a.fill(-1) >>>b array([[-1,-1,-1, -1], [-1,-1, -1,-1], [-1,-1,-1 ,-1]]) labas edutableaubc'estletabl eauamodifiera,c'estdoncaussimodifierb Pourplusde documentation surles ujet:http://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 12/58

2.6"F ancyin dexing»Chapitre2:Lectureetécrituredan suntableau

2.6"Fancy indexi ng»

Onpe utaccéderauconte nud'untableaunumpytantenlec turequ'ené criture,enutilis antle"fancyin dexing»(selon

laterm inologieo ffi cielle...).Icilespositionsdansunv ecteur oudansun ematriceneprocèdentplusnéc essairementp ar des"co upes», maispeuventêt redo nnéesdansunordret outàfaitquelconque.

Siaestunt ableau,et siIestunt ableaud' indices(éventuel lementunelisteouunt uple),alorsa[I]renvoieletableau

(demêmef ormatqueletable auI)formédesélémentsa[i],oùiestdansI. >>>a= np.arange(0,100,10);a array([0,10, 20,30,40, 50,60, 70,80,90]) >>>b= a[[6,2,1,3]];b array([60,20, 10,30]) >>>indices= np.array([[5,2,1],[3,8,7]]) >>>b= a[indices];b array([[50,20,10], [30,80,70 ]]) ondeman deletableau[a 6 ,a 2 ,a 1 ,a 3 ]ondeman deletableau [[a 5 ,a 2 ,a 1 ] [a 3 ,a 8 ,a 7 ]] >>>a =np.arange(24).reshape(4,6);a array([[0, 1,2,3, 4,5], [6,7,8 ,9,10,11 ], [12,13,14, 15,16,17], [18,19,20, 21,22,23]]) >>>b= a[[3,1,0,1]];b array([[18,19,20, 21,22, 23], [6,7,8, 9,10,11] , [0,1,2, 3,4,5] , [6,7,8, 9,10,11] ]) ondeman deletableaudeslignesa 3 ,a 1 ,a 0 ,a 1

Subtilité:lestableauxbformésci-dessus(etqui nesontpas obtenuspas "slicing »)neso ntpasdesimples "vues»sur

unepar tiedea(lanotion aétédiscutéedansl aso us-sectio nprécédente).Ilssontdonc indépendants dea(modifierb

n'a ff ectepasaetréci proquement). Le"f anc yindexing»,çafon ctionneaussipourdesop érationsd'é criture: >>>a= np.arange(0,100,10);a array([0,10 ,20,30, 40,50,60,70,80, 90]) >>>a[[7,2, 5,3]] =(7777,222 2,5555,3333); a#on modifiea[7],a[2], a[5]eta[3] array([0,10 ,2222, 3333,40,5555,60,7777,80, 90])

Commesitoutce lanesu

ffi saitpas,onpe utaussiutili serle sméthodestakeetput.

Aveca.put(positions,source)onremplace, termeàterme,lesvaleu rsde sourcedanslespo sitio nsindiquées.

>>>a= np.arange(10);a array([0,1,2, 3,4,5, 6,7,8, 9]) >>>a.put([6,1,5,2],[66,11,55,22]); a#place66enposition 6,11 enposition1, etc. array([0,11 ,22,3, 4,55,66,7, 8,9]) Aveca.take(positions)onlit,terme àterme,les valeurs deadanslespo sitionsi ndiquées. >>>a= np.arange(0,100,10);a array([0,10 ,20,30, 40,50,60,70,80, 90]) >>>np.take(a,[6,1, 5,0]) #renvoiele tableaudesvaleurs a[6],a[1],a[5 ],a[0] array([60,10,50, 0])

Pourunema trice,onu tiliseraunargumentsuppl émentai re"axis=...»pourspécifierdansquelsensonfaitlalecture

(selonleslignes avecaxis=0,selonleslignesavecaxis=1).En l'absence decetteprécision,lalectures 'effectuecommesi

letable auavaitété"aplati ». >>>a =np.arange(0,160,10).reshape(4,4);a array([[0 ,10,20,30], [40,50,60 ,70], [80,90,100 ,110], [120,130,140 ,150]]) >>>i= np.array([3,0,2])#trois indices >>>a.take(i)# lecturedea"aplati" array([30,0, 20]) >>>a.take(i,axis=0) #lecturesdelignes array([[120,130, 140,150], [0,10,20,30], [80,90,100,1 10]]) >>>a.take(i,axis=1) #lecturesdecolonnes array([[30, 0,20], [70,40,60] , [110,80,100], [150,120,140]]) http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 13/58

2.6"F ancyin dexing»Chapitre2:Lectureetécrituredan suntableau

Onpe utsignalerégalemen tlesfonctionssuivan tes:

place(a,conds,b)écritdansalesvaleurs debauxpositionsd easpécifiéesparletableau debo oléensconds

>>>a =np.arange(10);a array([0,1,2, 3,4, 5,6,7, 8,9]) >>>np.place(a, np.mod(a,3)==0,0);a# remplacetoutesles valeursmultiples de3 pardes0 array([0,1,2, 0,4,5, 0,7,8, 0]) Lafon ctioncopytoestpresq uesynonymedela fonctionplace(sereporte ràladoc!) >>>a= np.arange(10);a array([0,1, 2,3,4, 5,6,7, 8,9]) >>>np.copyto(a,-1, where=np.mod(a,3)==0);a#remplace lesvaleurs multiplesde 3pardes -1 array([-1,1, 2,-1,4, 5,-1,7, 8,-1]) http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 14/58

Chapitre3

Dimensionsd'untableau

3.1Redimensio nnementpar"reshape»ou"resize»

Laprin cipaleméthodepourmodifi erlatailled'untableauestreshape.Leredimensionnementd'untableauestquand

mêmesoumisà lacontr ainte quelenom bretotald'élémentsdoitresterconstant.On pourr aainsi passer(danslesdeux

sens)d'un vecteurdetai llenàunematricedetaille(p,q)ouàu nematrice detaille(r,s)àconditionquen=pq=rs.

Siaestunt abl eaunumpy,l'expressiona.reshape(n,p)renvoieunecopiered imensionnée(le contenudela variable

initialen'est doncpasa ff ecté,commeonleconstate ci-des sous ). >>>a =np.array(range(6));a array([0,1,2, 3,4, 5]) >>>a.reshape(1,6) array([[0,1,2, 3,4,5]]) >>>a array([0,1,2, 3,4,5]) >>>a.reshape(2,3 ) array([[0,1,2], [3,4,5]]) >>>a.reshape(3,2) array([[0,1], [2,3], [4,5]]) >>>a.reshape(6,1) array([[0], [1], [2], [3], [4], [5]])

Ilya un eau trepossib ilitéquiconsis teàréinitialiserl'attributshaped'untabl eaunumpy.Ladifférenceaveccequi

précèdeestque leredimension nementestfait "surplace »,etdoncquelecontenudelava ria bles'entrouve a

ff ecté. >>>a= np.array(range(6)); >>>a array([0,1,2, 3,4,5]) >>>a.shape =(2,3);a #devientmatrice 2×3 array([[0,1,2], [3,4,5]]) >>>a.shape= (3,2);a# devientmatrice 3×2 array([[0,1], [2,3], [4,5]]) >>>a.shape= 6;a# redevientunvecteur array([0,1,2, 3,4,5])

Autrepossib ilité,lafonctionresize,quipermetderedimensionnerunbloc,entransformant(surplace)untableauT

(ànéléments)enuntableauT ? (àn ?

éléments).Sin

? >n,letableauT ? estrempl iavecrépétit ionsdesélémentsde t.

SinonT

? estrempl iparlesnpremiersélémentsdeT. >>>a =np.array(range(6));a array([0,1,2, 3,4, 5]) >>>a.resize(3,2); a array([[0,1], [2,3], [4,5]]) >>>a.resize(2,3); a array([[0,1, 2], [3,4,5]]) >>>np.resize(a,(4,3)) array([[0,1,2], [3,4,5], [0,1,2], [3,4,5]] ) >>>a array([[0,1, 2], [3,4,5]]) >>>np.resize(a,(1,7)) array([[0,1,2, 3,4, 5,0]]) >>>np.resize(a,(2,5)) array([[0,1,2, 3,4], [5,0, 1,2,3]]) >>>a array([[0,1,2], [3,4,5]]) aveca.resizelamod ificationavecnp.resize(a,...),unautr esexemples s'e ff ectue"enplace »nouveau tableau estcrééav ecnp.resize(a,...) 15

3.2Aplatissemen td'untableauChapitre3:Dimensionsd'untableau

Lafonctionresizepermetégalementd ecréerdestableauxconstants conten antuneautreval eurque0et1(sinonon

utiliseraitlesfonctionszerosouones): >>>np.resize(1.23, 4) array([1.23, 1.23,1.23,1 .23]) >>>np.resize(9, 7) array([9,9,9, 9,9,9, 9]) >>>np.resize(5,(3,6)) array([[5,5, 5,5,5, 5], [5,5,5, 5,5,5], [5,5,5, 5,5,5]])

3.2Aplati ssementd'untableau

Laméth odeflattend'untablea unumpyrenvoieunecopie"ap latie»decetableau .

Cettefonction estl'occasiondedécouvri runargume ntfacultatifsouventemployéqu andone stamenéàparcourirun

tableau.C'estl'argumentorder=...dontlaval eurpardéfautest order='C'etqui peutêtremo difiéenorder='F'.

Avecorder='C'(où'C'dési gnelel angagedeprogrammatio n)lepa rcourss'effectued'abordde gaucheàdroitesurune

ligneavant depasseràlalignes uivante(d oncl'indicedecolonnevariep rioritairemen t).Av ecorder='F'(où'F'd ésign e

lelan gagedeprogrammationF ortran)leparcou rss'e ff ectued'aborddehau tenbassuru necolonne avantdepass eràla colonnesuivan te(doncl'indicedelignevar iepriori tairement). >>>a =np.array([[1,5,3],[2,7,4]]) >>>a array([[1,5, 3], [2,7,4]]) >>>a.flatten()# parcourspar défaut(àdroite d'abord) array([1,5, 3,2,7, 4]) >>>a.flatten('F') #parcoursFortran(en basd'abord) array([1,2,5, 7,3,4]) Remarque:lafon ctionravelestp euouprousynon ymede flatten.

Siaestunt able aunumpy,alorsa.flatrenvoieunitérateurp ermetd'ac céderséquentielle mentàtouslesélémen tsd'un

tableau(dansl'ordre'C' ou'F'quiaprési déàlacréationdutable au).L' intérê testqu'i ciiln'yap as( contrairementà

lafon ctionflatten)derecopiedutableau. >>>a array([[9,5,6], [8,7,4]]) >>>a.flat[3] 8 >>>sum(xfo rxin a.flat) 39
l'élémentenposition3dansalasomme deséléme ntsdea Iles tintéress antdecompareraveclerésultatsuiva nt:

Quandonévaluesum(xforx ina),lavariablexprend

lesvaleurs a[0]=[9,5,6]puisa[1]=[8,7,4].

Lasomme estdonc [9,5,6]+[8,7,4]=[17,12,10].

>>>sum(xfo rxin a) array([17,12,10])

3.3Transpo sitiond'unematrice

Lafon ction(oulaméthode)transpose,ouplussimplementlaméthodeT,renvoientlatransposéed'unematrice:

>>>a array([[1,2, 3,4], [5,6,7 ,8], [9,10,11,12], [13,14,15, 16]]) >>>a.transpose() array([[1,5, 9,13], [2,6,10,1 4], [3,7,11,1 5], [4,8,12,1 6]]) >>>a.T array([[1,5, 9,13], [2,6,10 ,14], [3,7,11 ,15], [4,8,12 ,16]])

3.4Suppressio ns/insertionsdelignes,decolonnes

delete(a,k,axis=0)etdelete(a,k,axis=1)supprimentrespectivement lak-ièmeligneet lak-ièmecolonnede a.

Letrois ièmeargumentindiqu edonclenumérod'in dice(l'axe)selonlequelonpratiquecettesuppression.

L'argumentaxis=...esttr èssouventprésent (defaçonfacultativ e)danslesfonctionsdumodulenumpy:disonspour

simplifier,quepourdesmatrices (deuxindices), axis=0signifie"selonl'i ndicede ligne»etaxis=1signifie"selonl' indice

deco lonne».Souvent,d'a ill eurs,lemotaxispeutêtreom is. http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 16/58

3.5Perm utations/rotationsdelignes,decolonnesChapitre3:Dimensionsd'untableau

>>>a array([[0,1, 2,3,4], [10,11,12, 13,14], [20,21,22, 23,24], [30,31,32, 33,34]]) >>>b= np.delete(a,2,0); >>>b array([[0, 1,2,3, 4], [10,11,1 2,13,14], [30,31,3 2,33,34]]) >>>c= np.delete(b,3,1) >>>c array([[0, 1,2,4], [10,11,12 ,14], [30,31,32 ,34]]) uneamatricedetype 4×5lamatrice bestobten ueenlamatric ecestobten ueen supprimantlaligned'i ndice2deasupprimantlacolonned'indi ce3deb Onpe utégalementsupp rimerplusieurscolonnes(ouligne s)àlafois.Voiciquelquesexemple s: >>>np.delete(a ,np.s_[0::2],1) array([[1,3], [11,13], [21,23], [31,33]]) >>>np.delete(a,np.s_[1::2],1) array([[0, 2,4], [10,12,1 4], [20,22,2 4], [30,32,3 4]]) >>>np.delete(a,[0,2,3],1) array([[1,4], [11,14], [21,24], [31,34]])

supprimelescolonnesd'i ndicepairsuppri melescolonnes d'indiceimpairsupprimelescol onnesd'indice0, 2,3

Lesexpre ssionsinsert(a,k,v,axis=0)etinsert(a,k,v,axis=1)permettentd'insérerlavaleur vrespectivement

avantlak-ièmeligneou avantlak-ièmecolonnedea.Voicideuxexemples: >>>a array([[0,1, 2,3], [10,11,12, 13], [20,21,22, 23]]) >>>np.insert(a ,2,-1,axis=1) array([[0,1, -1,2,3] , [10,11,- 1,12,13], [20,21, -1,22, 23]]) >>>np.insert(a,1,0,axis=0) array([[0,1, 2,3], [0,0,0 ,0], [10,11, 12,13], [20,21,22 ,23]]) unemat riceadety pe3×4insèredes-1justeavan tinsèredes0justeavan t lacolon ned'indice2laligne d'indice1

Lesexpre ssionsappend(a,v,axis=0)etappend(a,v,axis=1)permettentd'ajouterunematri ce-colonneC(respecti-

vementunematric eV)aprèsladernièrel igne(respectivementaprèsladernièrecolonne)dea.Ilf aut veilleràceq uela

matriceajoutéeaitun formatcompatibleavec celuidea.Voicideuxexemples: >>>a array([[0,1, 2,3], [10,11, 12,13], [20,21,22, 23]]) >>>np.append( a,[[7],[8],[9]],1) array([[0,1, 2,3,7], [10,11,12, 13,8], [20,21,22, 23,9]]) >>>np.append(a,[[3,5,7,9]],0) array([[0, 1,2,3], [10,11,12, 13], [20,21,22, 23], [3,5,7, 9]]) unemat riceadety pe3×4ajouteunecolonn e[[7,8,9] ]ajouteuneligne[3,5, 7,9] aprèsladernière colonne aprèsladernièreligne

Enrepr enantl'exempledelamatri ceprécédentea,onvoitcommentajouterlamatriceidentitéàdroitedelamatricea

(l'argumentintpermetdefaireens ortequ elerésultatsoi tencor eàcoefficientsentiers). >>>np.append(a ,np.identity(3),1) array([[0., 1.,2.,3.,1.,0., 0.], [10.,11.,12.,13.,0.,1.,0.], [20.,21.,22.,23.,0.,0.,1.]]) >>>np.append(a,np.identity(3,int),1) array([[0,1, 2,3, 1,0,0], [10,11, 12,13, 0,1,0], [20,21,22 ,23,0, 0,1]])

3.5Permutat ions/rotationsdelignes,decolonnes

fliplr(m)inversel'ordredescolonne sdem:ici"lr»estmispour"leftright». Remarque:çane marche pasp ourlesvecteurs, carilfautqu'ilyait aumoinsdeux dimensions. >>>m array([[0,1, 2,3], [10,11, 12,13], [20,21,22, 23]]) >>>np.fliplr(m ) array([[3,2, 1,0], [13,12, 11,10], [23,22,2 1,20]]) >>>m array([[0,1, 2,3], [10,11, 12,13], [20,21,22 ,23]]) lamatrice initialeminversel'ordredescolonnesde mlecon tenuinitialdemestinc hangé http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 17/58

3.5Perm utations/rotationsdelignes,decolonnesChapitre3:Dimensionsd'untableau

flipud(m)inversel'ordredeslignesd em:ici"ud»estmispour"updown». >>>m array([[0,1, 2,3,4], [10,11,12, 13,14], [20,21,22, 23,24], [30,31,32, 33,34]]) >>>np.flipud(m) array([[30,31,32, 33,34], [20,21,2 2,23,24], [10,11,1 2,13, 14], [0,1,2, 3,4]]) >>>m array([[0,1, 2,3,4], [10,11,12 ,13,14], [20,21, 22,23, 24], [30,31,32 ,33,34]]) lamatrice initialeminversel'ordredeslignesd emlecon tenuinitialdemesti nchangé

Commeonlevoit ici,c' estflipudqu'ilfautu tiliserpourl'inv erserl'ordredeséléments desvecteurs :

>>>a= np.arange(1,10);a array([1,2,3, 4,5,6, 7,8,9]) >>>np.flipud(a) array([9,8,7, 6,5,4, 3,2,1]) Entreautresva riationspossibles,onpeutn' inverserqueleskpremiersélémentsd'un vecteur: >>>a= np.arange(1,10);a array([1,2,3, 4,5,6, 7,8,9]) >>>a[:7]= np.flipud(a[:7]);a array([7,6,5, 4,3,2, 1,8,9]) Danscete xemple,oninvers el'ordredesélémentsdela lignequ iestenposition2dansm: >>>m array([[0,1, 2,3,4], [10,11,12, 13,14], [20,21,22, 23,24], [30,31,32, 33,34]]) >>>m[2]= np.flipud(m[2]);m array([[0, 1,2,3, 4], [10,11,12 ,13,14], [24,23,22 ,21,20], [30,31, 32,33, 34]])

Pourceuxq ueçaintéress e,rot90(m,k=1)renvoieunecopied elamatricemaprèskrotationsd'angleπ/2.

>>>m array([[0,1, 2,3], [10,11,12,13], [20,21,22,23]] >>>np.rot90(m) array([[3,13, 23], [2,12,22], [1,11,21], [0,10,20]]) >>>np.rot90(m,-1) array([[20,10,0], [21,11,1], [22,12,2], [23,13,3]]) >>>np.rot90(m,2) array([[23,22,21,20], [13,12,11,10], [3,2,1,0]]) rotationde 90˚rotationde -90˚rotationde180˚

L'expressionroll(a,k,axis=None)renvoieunecopieduta bleauaprèskrotationsd'un eposition(versladroites i

k>0,verslagauchesik<0).Les éléments quisortentd'uncotérentren tdel'autre. Unnouveautableaues tcréé,ilne

s'agitdoncpasd'unerot ati on"en place».Pourune matrice,l'argumentaxisestfacult atif(pardéfautc'estunerotation

surles lignes).Pour unerotationsurlescolonnes d'unematri ce,onutili seral'argumentaxis=1. >>>a= np.arange(10);a array([0,1,2, 3,4, 5,6,7, 8,9]) >>>np.roll(a,1) array([9,0,1, 2,3,4, 5,6,7, 8]) >>>np.roll(a,2) array([8,9,0, 1,2,3, 4,5,6, 7]) >>>np.roll(a,-4) array([4,5,6, 7,8, 9,0,1, 2,3]) >>>m array([[0,1, 2,3], [10,11,12, 13], [20,21,22, 23]]) >>>np.roll(m,1,axis=0) array([[20,21,22, 23], [0,1,2 ,3], [10,11,12, 13]]) >>>np.roll(m,1,axis=1) array([[3,0, 1,2], [13,10,11, 12], [23,20,21, 22]]) >>>np.roll(m,-2,axis=1) array([[2,3, 0,1], [12,13,10, 11], [22,23,20, 21]]) diversesrotations d'unmêmevecteurrotationd'unelignevers lebasuneco lonne versladroi te oudeu xcolonnesverslagauc he

L'expressionswapaxes(a,axe,axe')effectueunéchangedes axessur letableaua.Pourlesvecteurs,c'estsanseffet,

pourlesmatr icesc'est équivalentàlatransposit ion.Çanepeutdon cavoird'utilitépourlestableau xàn≥3indices.

>>>a= np.arange(30).reshape(2,3,5);a array([[[0,1, 2,3,4], [5,6,7 ,8,9], [10,11,1 2,13,14]], [[15,16, 17,18,19], [20,21,2 2,23,24], [25,26, 27,28, 29]]]) >>>np.swapaxes(a,0,1) array([[[0,1, 2,3,4], [15,16,17, 18,19]], [[5,6, 7,8, 9], [20,21,22, 23,24]], [[10,11, 12,13, 14], [25,26,27, 28,29]]]) deuxta bleauxdeformat3×5troistable auxdeformat2×5 http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 18/58

3.6Opération sparblocsChapitre3:Dimensionsd'untableau

3.6Opérat ionsparblocs

concatenatepermetd'accolerd euxouplusieurstableaux(hor izontalement avecaxis=1,verticalementavecaxis=0).

Encas deconcaténat ion horizontaleparexemple,touteslescolo nnesdoiventavoirlamêmehauteur. Lesdi ff érentstableauxàconc aténerdoiventêtred onn éssouslaformed'untuple(voirexemple s): >>>a= np.array(range(8)).reshape(2,4) >>>a array([[0,1,2, 3], [4,5,6, 7]]) >>>b= np.zeros(a.shape,int);b array([[0,0,0, 0], [0,0,0, 0]]) >>>c= np.ones(a.shape,int);c array([[1,1,1, 1], [1,1,1, 1]]) >>>np.concatenate((a,b),axis=1) array([[0,1, 2,3,0, 0,0,0] , [4,5,6, 7,0,0, 0,0]]) >>>np.concatenate((a,b,c),axis=1) array([[0,1,2, 3,0, 0,0,0, 1,1,1, 1], [4,5,6, 7,0,0, 0,0,1, 1,1,1]]) >>>np.concatenate((a,c),axis=0) array([[0,1,2, 3], [4,5,6, 7], [1,1,1, 1], [1,1,1, 1]])

Onpe utaussiutiliserles fonctionshstack(concaténationhorizontale)etvstack(concaténationverticale).

Voiciquelques exemplesenreprenantlasi gnificationprécédentedes tablea uxa,b,c: >>>np.vstack((a,c)) array([[0,1,2, 3], [4,5,6, 7], [1,1,1, 1], [1,1,1, 1]]) >>>np.hstack((a,c)) array([[0,1,2, 3,1,1, 1,1], [4,5,6, 7,1,1, 1,1]]) >>>np.hstack((a,b,c)) array([[0,1,2, 3,0, 0,0,0, 1,1,1, 1], [4,5,6, 7,0,0, 0,0,1, 1,1,1]])

Lafon ctioncolumn_stackcombinedesvecteurs-l ignesen lescolonnesd'untableau.Onvoiticil adifférencedesrésult ats

obtenusenutilisanthstack,vstackoucolumn_stacksurun tuple dedeuxvecteurslignes aetb. >>>a =np.array((1,2,3)) >>>b= np.array((2,3,4)) >>>np.hstack((a,b)) array([1,2,3, 2,3, 4]) >>>np.vstack((a,b)) array([[1,2,3], [2,3,4]]) >>>np.column_stack((a,b)) array([[1,2], [2,3], [3,4]])

Siaestunt ableaude nlignes,l'expressionvsplit(a,k)renvoieuntuplede ktableauxden/klignesreprésen tantun

découpagedutableaua(lenom brendeli gnesdeadoitêtreunmul tipledek). >>>a= np.array(range(24)).reshape(4,6);a array([[0,1, 2,3,4, 5], [6,7,8, 9,10,11] , [12,13,14, 15,16,17], [18,19,20, 21,22,23]]) >>>b,c =np.vsplit(a,2) >>>b array([[0,1, 2,3,4, 5], [6,7,8, 9,10,11] ]) >>>c array([[12,13,14, 15,16,17], [18,19,20 ,21,22, 23]]) unemat ricedetype4×6onlap artageend euxtableaux ded euxlignes

Siaestun tableaudencolonnes,l'ex pressionhsplit(a,k)renvoieuntuplede ktableauxden/kcolonnesrepré sentant

undécoupa gedutableaua(lenom brendecol onnesdeadoitêtreunmul tipledek).

Voiciunexempl eenréu tilisantladéfinitionp récéde ntedutableaua.Onapartargéaettr oistableauxx,y,zdedeux

colonnes,avant delescombineravechstackmaisdans l'ordre z,x,y. >>>x,y,z =np.hsplit(a,3) >>>print(x) [[01 ] [67] [1213] [1819]] >>>print(y) [[23] [89] [1415] [2021]] >>>print(z) [[45] [1011] [1617] [2223]] >>>print(np.hstack((z,x,y))) [[45 01 23] [10116 789] [161712 131415] [2223 181920 21]]

Enfai t,lesfonctionshsplitetvsplitacceptentaussiund euxièmeargumentsou slaformed'u nelistecroissanted'ind ices,

cequi permetdechoi sirplusfinementlessépar ations enlignesouencolonnes. http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 19/58

3.6Opération sparblocsChapitre3:Dimensionsd'untableau

Onre prendànouveaul'exemple dutab leauaprécédent(etquipo ssède6colonnes).L'argument[2,5]signifiequ'on

marqueuneséparationjuste av antlacolonned'indice2,puisjusteavantlacolonned'indice5.Ile nr ésulte unpartage

deaentr oistableauxayantresp ectivement2,puis5-2=3,etenfin6-5=1colonnes. >>>x,y, z=np.hsplit(a,[2,5]) >>>x array([[0,1], [6,7], [12,13], [18,19]]) >>>y array([[2,3, 4], [8,9,1 0], [14,15,16 ], [20,21,22 ]]) >>>z array([[5], [11], [17], [23]])

tile(a,[n,p])construituntableauenr épétan tnfoisletablea uadanslesens horizont alet pfoisdanslesensv ertical.

>>>a= [[1,2],[3,4]] >>>np.tile(a,2) array([[1,2,1, 2], [3,4,3, 4]]) >>>np.tile(a,[2,1]) array([[1,2], [3,4], [1,2], [3,4]]) >>>np.tile(a,[4,4]) array([[1,2,1, 2,1, 2,1,2] , [3,4,3, 4,3, 4,3,4], [1,2,1, 2,1, 2,1,2], [3,4,3, 4,3, 4,3,4], [1,2,1, 2,1, 2,1,2], [3,4,3, 4,3, 4,3,4], [1,2,1, 2,1, 2,1,2], [3,4,3, 4,3, 4,3,4]]) http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 20/58

Chapitre4

Tableauxspécifiques

Ile stbiencom modedefabriq uerdestableauxdontle terme généralrépondàuneformuledo nnéeouauc ontraireest

obtenudefaçonpseu do-aléatoire.Onvoitici lesexempleslesp lusutiles.

4.1Tableauxc onstants

Lafon ctionzerospermetdeformerd establ eauxdonttouslesco efficientssontnuls.

-lepre mierargument,obligatoire,p réciseleformat(shape)dutableau:unentiernpourunvect eurdel ongueurn,un

couple(n,p)pourunemat ricedetype n×p,ouencoreuntuple(n,p,q,r,...)pouruntabl eauàpl usdedeuxindices.

Attention:lasyntaxezeros(3,5)esti ncorrecte,ilfautécrirezeros((3,5)). -una rgumentfacultatifpermetde fixerletypededonnées(c'estfloatpardéfaut). >>>np.zeros(5) array([0.,0., 0.,0.,0.]) >>>np.zeros((1,5)) array([[0.,0., 0.,0., 0.]]) >>>np.zeros(5,int) array([0,0,0, 0,0]) >>>np.zeros((5,3)) array([[0.,0., 0.], [0.,0.,0. ], [0.,0.,0. ], [0.,0.,0. ], [0.,0.,0. ]]) >>>np.zeros((5,1),complex) array([[0.+0.j ], [0.+0.j], [0.+0.j], [0.+0.j], [0.+0.j]]) Avecunesyn taxeanalo gue,lafonctiononespermetdeformerde stable auxdonttouslescoe fficientsvalent1. >>>np.ones((3,6)) array([[1.,1., 1.,1.,1., 1.], [1.,1.,1., 1.,1.,1.] , [1.,1.,1., 1.,1.,1.] ]) >>>np.ones((3,6),int) array([[1,1,1, 1,1, 1], [1,1,1, 1,1,1], [1,1, 1,1,1, 1]]) Rappelonsquechezlesb ooléens,false= 0="nul»=" vide» ,etTrue=1="non nul»=" nonvid e»: >>>np.zeros((3,3),bool) array([[False,False,False], [False,False,False], [False,False,False]], dtype=bool) >>>np.ones((3,3 ),bool) array([[True,True, True], [True,True,True ], [True,True,True] ],dtype=bool) Laméth odefilld'untablea unumpyremplitcetableauparu nevaleur constante.

Commelemontr entles exemplessuivants,leremp lissagese fait"enplace».L'adresse dutableauenmémoirenechange

pas.Enpart iculi er,iln'estpaspossibledemodifierle"dat atype» (voirl acolonned edroite,oulavaleurflot tan te3.14

aétéconvertieenlavaleurentière3pourleremplissage). >>>a =np.array([[1,5,3],[2,7,4]]) >>>a,id(a ) (array([[1,5,3], [2,7,4]]), 3899264) >>>a.fill(1); >>>a,id(a) (array([[1,1,1], [1,1,1]]), 3899264) >>>a.fill(3.14); >>>a,id(a) (array([[3,3,3], [3,3,3]]), 3899264)

Onpe utégalementnoter lesfonctionsones_likeetzeros_likedontlerôl eestformerl etableauconstant( val eurs

0ouvaleu rs1)ayantlemêmeformatqueletableaupasséenargument.

>>>a= np.arange(10).reshape(2,5);a array([[0,1, 2,3,4], [5,6,7 ,8,9]] ) >>>np.zeros_like(a) array([[0,0,0, 0,0], [0,0,0, 0,0]]) >>>np.ones_lik e(a) array([[1,1,1, 1,1], [1,1, 1,1,1]]) 21

4.2Identit é,matricesdiagonalesout riangulairesChapitre4:Tableauxspécifiques

Rappel:si?estunel iste, lasyntaxe??nrenvoielaconcaténationd enexemplairesde?.

One ndéduit unefaçontrèssimplede formerdes tableauxconstants ,oudumoinscon tenantdesrépétition s:

>>>np.array([2]*5) array([2,2,2, 2,2]) >>>np.array([1,2]*3) array([1,2,1, 2,1, 2]) >>>np.array([[1,2]]*3) array([[1,2], [1,2], [1,2]]) >>>np.array([[1,2],[3,4]]*2) array([[1,2], [3,4], [1,2], [3,4]])

4.2Identité, matricesdiagonalesout riangulaires

Lafon ctionidentityfabriquelamatriceident itéd'or dren(donnécommepremierargume nt). >>>np.identity(4) array([[1.,0., 0.,0.], [0.,1.,0.,0.], [0.,0.,1.,0.], [0.,0.,0.,1.]]) >>>np.identity(4,int) array([[1,0,0, 0], [0,1,0, 0], [0,0,1, 0], [0,0,0, 1]]) >>>np.identity(4,complex) array([[1.+0.j, 0.+0.j,0.+0.j,0.+0.j], [0.+0.j,1.+0.j,0.+0.j,0.+0.j], [0.+0.j,0.+0.j,1.+0.j,0.+0.j], [0.+0.j,0.+0.j,0.+0.j,1.+0.j]])

Lafon ctioneyepermetdefabriqu erlama triceidentitéouplusgénéral ementu nematricedonttousles coefficientssont

nulssaufce uxd'unecerta ine"parallè le»àladiagonale etquivalent1.

Lepre mierargument(obligatoire)don nelenombrendeli gnes.Lesecondargumen t(faculta tif)donneleno mbrepde

colonnes(pardéfaut p=ndonclama triceestca rrée).Unargumentfacultat ifno mmék=..permetdespécifieru n

décalagedeladiagonal ede1aud essus(sik>0)ouen-dessous(sik<0)deladiagonaleprincipale. Enfin,on peutajouter unargument pourfixerletype desdonné es(floatpardéfaut). >>>np.eye(5,dt ype=int) array([[1,0,0, 0,0], [0,1, 0,0,0], [0,0,1, 0,0], [0,0,0, 1,0], [0,0,0, 0,1]]) >>>np.eye(5,6,dtype=int) array([[1,0,0, 0,0,0], [0,1,0, 0,0,0], [0,0,1, 0,0, 0], [0,0,0, 1,0,0], [0,0, 0,0,1, 0]]) >>>np.eye(1,5) array([[1.,0., 0.,0.,0.]]) >>>np.eye(1,5,1) array([[0.,1., 0.,0., 0.]]) >>>np.eye(1,5,2) array([[0.,0., 1.,0.,0.]]) >>>np.eye(4,k= -2) array([[0.,0., 0.,0.], [0.,0.,0. ,0.], [1.,0.,0., 0.], [0.,1.,0., 0.]]) >>>np.eye(4,k=1) array([[0.,1., 0.,0.], [0.,0.,1., 0.], [0.,0.,0., 1.], [0.,0.,0., 0.]]) >>>np.eye(4,k=3) array([[0.,0., 0.,1.], [0.,0.,0., 0.], [0.,0.,0., 0.], [0.,0.,0., 0.]])

Lafon ctiondiagrenvoieladiagonaled'un ematric e.Avecund euxièmeargument (facultatif)k,onobtientunesur-

diagonale(sik>0)ouunesous-diagonale(sik<0). >>>a array([[0,1, 2,3], [10,11,12, 13], [20,21,22, 23], [30,31,32, 33]]) >>>np.diag(a) array([0,11, 22,33]) >>>np.diag(a,1) array([1,12, 23]) >>>np.diag(a,2) array([2,13]) >>>np.diag(a,3) array([3]) >>>np.diag(a,-1) array([10,21,32]) >>>np.diag(a,-2) array([20,31]) >>>np.diag(a,-3) array([30])

Inversement,lafonctiondiag,sielleestappliquéeàunvecteur(ouàuneliste,ouàuntuple)renvoielamatricediagonale

forméesurlescoe ffi cientsdecevecteur: >>>np.diag([1,2,3]) array([[1,0,0], [0,2,0], [0,0,3]]) >>>np.diag((1,2,3)) array([[1,0,0], [0,2,0], [0,0,3]]) >>>np.diag(np.array([1,2,3])) array([[1,0, 0], [0,2,0], [0,0,3]]) àpartird'unelisteàpartird'untupleàpartird'unvec teur

Remarque:onsignale lesfon ctionsdiagonalàlaportéeunpeuplusgénéralequediagetdiagflat,etlefaitque

diagonalestaussiun attributdesta bleauxnumpy. http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 22/58

4.3Tab leauxdevaleurséchelonnées Chapitre4:Tableauxspécifiques

>>>a.diagonal() array([0,11, 22,33]) >>>np.diag(a) array([0,11, 22,33]) >>>np.diagonal(a) array([0,1 1,22,33]) attributdiagonaldel' objetafonctiondiagdumodul enumpyfonctiondiagonaldumodul enumpy Signalonslafonctionfill_diagonal,quicommesonnoml'indiquepermetd'écriresurladiagonaled'unematrice. >>>a array([[1,2,3], [4,5,6], [7,8,9]]) >>>np.fill_diagonal(a,0); a array([[0,2, 3], [4,0,6], [7,8,0]]) >>>np.fill_diagonal(a,[-1,-2,-3]); a >>>array([[-1, 2,3], [4,-2,6], [7,8,-3 ]])

Lafon ctiontriformeunematrice don tlescoefficientsvalent1lelong eten-d essousd 'unek-èmeparal lèleàladiagonale,

et0au-dessus.Onpeutpréciserle "dt ype»(c'estfloatpardéfau t): >>>np.tri(4) array([[1.,0., 0.,0.], [1.,1.,0. ,0.], [1.,1.,1., 0.], [1.,1.,1., 1.]]) >>>np.tri(4,k=1) array([[1.,1., 0.,0.], [1.,1.,1. ,0.], [1.,1.,1., 1.], [1.,1.,1., 1.]]) >>>np.tri(4,k=-1,dtype=int) array([[0,0,0, 0], [1,0,0, 0], [1,1,0, 0], [1,1,1, 0]])

Appliquéeàuntableaunumpylesfonction stril(Lpou rlow)ettriu(Upou rup)renvoieunecopiedutableauoù

touslesco e ffi cientsau-dessus ouen-dessousd'unecertainediagonaleont étéan nulés(voirexemples): >>>a array([[1,2, 3,4], [5,6,7 ,8], [9,10,11,12], [13,14,15, 16]]) >>>np.tril(a) array([[1,0, 0,0], [5,6,0 ,0], [9,10,11,0], [13,14,15 ,16]]) >>>np.triu(a) array([[1,2, 3,4], [0,6,7 ,8], [0,0,11 ,12], [0,0,0 ,16]]) >>>np.tril(a,1 ) array([[1,2, 0,0], [5,6,7 ,0], [9,10,11,12], [13,14,15, 16]]) >>>np.tril(a,-1) array([[0,0, 0,0], [5,0,0, 0], [9,10,0,0], [13,14,15 ,0]]) >>>np.triu(a,-1) array([[1,2, 3,4], [5,6,7 ,8], [0,10,11,12], [0,0,15,1 6]])

4.3Tableauxd evaleurséchelonnées

Lafon ctionarangecréedesvecteur sdev aleursrégulièrementespacées. Lasyn taxeestarange(d,f,h,dtype=...),etgénèrelesvaleursdel'intervalle[d,f[avecunpa sdeh. >>>np.arange(1 0) array([0,1,2, 3,4,5, 6,7,8, 9]) >>>np.arange(100,200,20) array([100,120, 140,160,180]) >>>np.arange(100,201,20) array([100,120, 140,160,180,200]) >>>np.arange(10,0,-1) array([10,9,8, 7,6,5, 4,3,2, 1]) >>>np.arange(8,dtype=float) array([0.,1., 2.,3.,4., 5.,6.,7.]) >>>np.arange(8.) array([0.,1., 2.,3., 4.,5.,6., 7.])

Pourlesval eursdansl etypefloatoucomplex,etpouréviteruneerreurd'arrondiquipourraitaffecterladernièrevaleur

del' intervalle,ilpeutêtrepréférabled'utiliserlafoncti onlinspace.

Lasyn taxeestlinspace(a,b,n)etle résultatestun vecteurdenvaleursrégulièremen téchelonnéesdusegment[a,b]

(doncicilesextré mitéssontin cluses). Pardéfaut,n=50.Sib >>>np.linspace(0,100,4) array([0.,3 3.33333333,66.66666667,100.]) >>>np.linspace(0,100,7) #7valeursde[0,100]dan sl'ordrecroissant array([0.,1 6.66666667,33.33333333,50., 66.66666667,83.33333333,100.]) >>>np.linspace(1 00,0,7)#7valeursde[0,100] dansl'ordre décroissant array([100., 83.33333333,66.66666667,50., 33.33333333,16.66666667,0.])

Onpou rraconsulterla fonctionlogspacequifourn itdesvaleursrégulière mentespacée ssuruneéche llelogarithmique.

http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 23/58

4.4Tab leauxrépondantàunef ormuledonnéeChapitre4:Tableauxspécifiques

4.4Tableauxr épondantàuneformuledo nnée

Lafon ctionfromfunctionpermetdeconstrui reunta bleaudontletermegénéralobéitàu nefor muledonnée.

>>>deff(i ,j):return 10*i+j >>>np.fromfunction(f,(4,5)) array([[0., 1.,2.,3.,4.], [10.,11.,12., 13.,14.], [20.,21.,22., 23.,24.], [30.,31.,32., 33.,34.]]) >>>#le mêmetableau,en forçantletype int >>>np.fromfunction(f,(4,5),dtype=int) array([[0,1, 2,3,4], [10,11,12 ,13,14], [20,21, 22,23, 24], [30,31,32 ,33,34]]) Lemême tableaupeu têtreobtenu(et onasouventutilisé cettepossibilit é)enconvertissantuneliste(ouuneli ste deli stes)"encompréhension»av ecarray(quichois itle "datatype»dutableauàpartirdesélémentsdonnéesici explicitement).Cetteméthodeestplus"dépensière »que fromfunctioncarel lefabriquelal isteavantconversion. >>>np.array([[f(i,j) forjinrange(5)] foriin range(4)]) array([[0, 1,2,3, 4], [10,11,12 ,13,14], [20,21,22 ,23,24], [30,31, 32,33, 34]])

Onpe ututiliserune"lam bdafonction»

pourcréerl etableau.

Icioncr éeune matricedeHil bert,det erme

généralH i,j =1/(i+j+1)aveci,j≥0. >>>np.fromfunc tion(lambdai,j:1/(i+j+1),(4,4)) array([[1., 0.5,0.33333333, 0.25], [0.5,0.333 333 33,0.25,0.2], [0.33333333,0.25,0.2,0.16666667] , [0.25,0.2,0.1 666 6667,0.1 428 5714]]) ?DéterminantsdeVandermonde

Soitx=(x

i )

1≤i≤n

unefami lledenscalaires,etsoitAlamatrice carréed'ord ren,determegénérala ij =x j-1 i .

Onsait quelavaleu rdudé termin antdeAest:detA=

? iDansnumpy,ondisposed'unefonctionvander,maisattention:l'indexationn'estpasconformeànotredéfinition:

>>>a =np.vander([1,10,100]);print(a) [[1 11] [100101] [10000100 1]] >>>np.linalg.det(a) -80190.000000000102 >>>a= np.vander(range(1,6));print(a) [[11 111] [168421 ] [812793 1] [2566416 41] [62512525 51]] Voicicommenté crirenotreproprefonc tionvandermonde: >>>def vandermonde(x):# icionattenduneliste ouunintervalle importnumpyas np;n= len(x);x= np.array(x) returnnp.vstack([x**i foriinrange(n)]) >>>a= vandermonde([1,10,100]);print(a) [[11 1] [110100] [110010000]] >>>np.linalg.det(a)

80189.999999999971

>>>vandermonde(r ange(1,6)) array([[1,1, 1,1,1], [1,2,4, 8,16], [1,3,9,2 7,81], [1,4,16,6 4,256], [1,5,25, 125,625]]) http://creativecommons.org/licenses/by-sa/3.0/fr/ jean-miche.ferrard@ac-paris.frmathprepa.fr unepet iteréférenceNumpy 24/58

4.5Tab leauxpseudo-aléatoiresChapitre4:Tableauxspécifiques

4.5Tableauxp seudo-aléatoires

Lesfonction squiformentdestableauxp seudo- aléatoiressontprésen tesdanslesous -modulerandomdumodul enumpy.

random.randrenvoieuntableaude valeursps eudo-aléatoiresdan sl'intervalle [0,1](aus ensdeladistributionu niforme).

Elleprendcommea rgumentunen tiern

1 (respectivementuneséquencen 1 ,n 2 ,...)etrenvoieunvecteurdelongueurn 1 (respectivementuntableaudeformatn 1 ×n 2 ×

···).

Lafon ctionrandom.samplefaitlamêmecho sequerandom.randmaisl'argumen testuntuple. Lafon ctionrandom.seedréinitialiselegénérateur den ombresaléatoires(argumententier). >>>np.random.ran d(6) array([0.14243652, 0.77345108,0.76627661,0.41079884,0.79899263, 0.95726012]) >>>np.random.see d(0)#réinitialiselegénérateurde nombresaléatoires >>>np.random.rand(2,6) #noterladifférence desyntaxeavec random.sample(ci-dessous) array([[0.5488135 ,0.71518937,0.60276338,0.54488318,0.4236548 ,0.64589411], [0.43758721,0.891773,0.96366276,0 .38344152,0.79172504,0.5 288 9492]])

Lafon ctionrandom.randnsuitlamêmesy ntaxeq uerandom.rand,maisellerenvoieunéchantillondevaleurspseudo-

aléatoiresausen sde laloinormalerédu ite(c'est-à-dired 'espéran ce0etd'écar t-type1). >>>np.random.randn(6) array([-0.75931933,0.49230711, 0.37242323,1.17957196, -2.26637722,1.05330359])

Appeléesavecunargumentvide ,lesfonctionsrandom.randetrandom.randnrenvoieunnombrep seudo-alé atoire(res-

pectivementpourlaloiuniformede [0,1]oupou rlaloinormaleN(0,1)).

Lafon ctionrandom.randintrenvoieunevaleur ouuntableaudev aleursentièresps eud o-aléatoiresaus ensdela

distributionuniformedansunintervall esemi-ouvert[a,b[.

Las yntaxeestrandom.randint(a,b)pouruneseu levaleur, random.randint(a,b,n)pou

Politique de confidentialité -Privacy policy