Nov 24, 2024

Wiki

Python

Aide

edit SideBar

Search

Creer Un Conteneur


Cas des tableaux, des matrices

Création d'un tableau par extension

Pour définir un tableau à une dimension :

  >>> from numpy import array
  >>> array((1,2,3,4,5))

et pour un tableau deux dimensions :

  >>> array(([0,1],[1,3]))

Création d'une matrice par extension

On procède de la même manière...

  >>> matrix(([0,1],[1,3]))
  matrix([[0, 1],
          [1, 3]])

On peut voir qu'il force la 2D :

  >>> matrix((1,2,3,4,5))
  matrix([ [1, 2, 3, 4, 5] ])

Utilisation du constructeur

Les constructeurs des classes array et matrix acceptent certains objets en argument, pour construire des tableaux/matrices à partir d'eux.

Ces objets peuvent être des listes, des tuples,

  >>> L=[1,2,3]
  >>> dd=array(L)
  >>> dd
  array([1, 2, 3])

ou encore d'autres array/matrix :

  >>> aa = array([[ 1,  2,  3,  4],
                  [ 5,  6,  7,  8]])
  >>> dd=array(aa)

Plus précisément, le constructeur est

  array(object, dtype = float, copy = 1, order = None, subok = 0, ndmin = 0)

  • object est l'objet source,
  • dtype le type du futur conteneur,
  • copie précise si l'on doit réaliser une copie, ou un alias (le préciser le force) :
  >>> aa=array([ [1,2,3] ])
>>> bb=array(aa, copy = 0)
  >>> bb[0,1]=2
  >>> bb
  array([ [1, 2, 3] ])
  >>> aa
  array([ [1, 2, 3] ])

On s'aperçoit que la modification de bb entraîne celle de aa. Alors que...

  >>> cc=array(aa, copy = 1)
  >>> cc[0,1]=222
  >>> cc
  array([ [1, 222, 3] ])
  >>> aa
  array([ [1, 2, 3] ])
  • ndmin fixe le nombre de dimension du conteneur
  >>> L=[1,2,3]
>>> dd=array(L, ndmin=2)
  >>> dd
  array([ [1, 2, 3] ])

A comparer avec ce qui précède.

Cas des vecteurs

arange

On peut utiliser arange pour créer un vecteur :

  >>> from numpy import arange
  >>> arange(10)
  array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Cette fonction est polymorphe : arange(a,b) crée un vecteur de a à b, avec un pas de 1 :

  >>> arange(4,8)
  array([4, 5, 6, 7])

  >>> arange(10.5,12.4)
  array([ 10.5,  11.5])

On peut changer le pas en ajoutant un troisième argument :

  >>> arange(10.5, 12.4, 0.3)
  array([ 10.5,  10.8,  11.1,  11.4,  11.7,  12. ,  12.3])

Enfin, on peut à chaque fois préciser le type voulu :

  >>> arange(4,8,dtype=float)
  array([ 4.,  5.,  6.,  7.])

linspace

Avec linspace, on fournit le point de départ et d'arrivée du vecteur, ainsi que le nombre de points voulu...

  >>> from numpy import linspace
  >>> linspace(5, 10, num = 5)
   array([  5.  ,   6.25,   7.5 ,   8.75,  10.  ])

Et on obtient un vecteur, ayant la taille voulue, aux valeurs interpolées linéairement.

On peut souhaiter ne pas considérer le point d'arrivée :

  >>> linspace(5, 10, num = 4, endpoint = False)
  array([ 5.  ,  6.25,  7.5 ,  8.75])

Auquel cas, le pas n'est pas toujours évident à voir, aussi on peut exiger qu'il fasse partie du retour de la fonction :

  >>> linspace(5, 10, num = 4, endpoint = False, retstep = True)
  (array([ 5.  ,  6.25,  7.5 ,  8.75]), 1.25)

logspace

Présentation

La fonction logspace fonctionne un peu comme linspace, mais en échelle log.

  >>> from numpy import logspace
  >>> logspace(0, 1, num = 10)
  array([  1.        ,   1.29154967,   1.66810054,   2.15443469,
           2.7825594 ,   3.59381366,   4.64158883,   5.9948425 ,
           7.74263683,  10.        ])

Dans ce qui précède, on calcule $10^x$, pour $x$ prenant 10 valeurs équiréparties dans [0,1], ce qui correspond donc a :

  >>> array([10**k for k in linspace(0,1,num = 10)])
  array([1.0, 1.2915496650148839, 1.6681005372000588, 2.1544346900318838, 2.7825594022071245,
   3.5938136638046276, 4.6415888336127784, 5.9948425031894086, 7.7426368268112693, 10.0])

On peut, comme pour linspace, décider de ne pas prendre la valeur d'arrivée.

Exemples

  >>> logspace(1, 2, num = 10)
  array([  10.        ,   12.91549665,   16.68100537,   21.5443469 ,
           27.82559402,   35.93813664,   46.41588834,   59.94842503,
           77.42636827,  100.        ])

  >>> logspace(1,10,num=10)
  array([  1.00000000e+01,   1.00000000e+02,   1.00000000e+03,
           1.00000000e+04,   1.00000000e+05,   1.00000000e+06,
           1.00000000e+07,   1.00000000e+08,   1.00000000e+09,
           1.00000000e+10])

Changement de base

La base peut être changée :

  >>> logspace(1, 10, num=10, base = 2)
  array([    2.,     4.,     8.,    16.,    32.,    64.,   128.,   256.,
           512.,  1024.])

Une illustration

Pour finir, et pour se convaincre que l'on est bien en échelle log, on peut tracer le résultat :

  >>> from pylab import plot, show
  >>> plot(linspace(0,100,num = 100),logspace(0,2,num = 100))
  [<matplotlib.lines.Line2D instance at 0x8d1b18c>]
  >>> show()

Autres façons de créer un conteneur

On peut créer un tableau constitué uniquement que de uns :

  >>> from numpy import *
  >>> x = ones( (3,4) )
  >>> ones( (2,3,4), dtype=int16 )

de zéros :

  >>> x = zeros( (3,4), dtype = float)

ou de rien du tout :

  >>> x = empty( (3,4), dtype = float )

Page Actions

Recent Changes

Group & Page

Back Links