Les Matrices en Python

Hier, j'ai eu le besoin de une matrice de type Python.

Apparemment, une simple réponse à ce besoin serait d'utiliser numpy.matrix(), mais l'autre problème que j'ai est que je voudrais une matrice de stocker des valeurs arbitraires avec un mélange de types, de même pour une liste. numpy.matrix ne pas effectuer cette. Un exemple est

>>> numpy.matrix([[1,2,3],[4,"5",6]])
matrix([['1', '2', '3'],
        ['4', '5', '6']], 
       dtype='|S4')
>>> numpy.matrix([[1,2,3],[4,5,6]])
matrix([[1, 2, 3],
        [4, 5, 6]])

Comme vous pouvez le voir, le numpy.matrix doit être homogène dans le contenu. Si une valeur de chaîne est présente dans ma initialisation, chaque valeur est implicitement stockées sous forme de chaîne. Ceci est également confirmé par l'accès à la seule les valeurs

>>> numpy.matrix([[1,2,3],[4,"5",6]])[1,1]
'5'
>>> numpy.matrix([[1,2,3],[4,"5",6]])[1,2]
'6'

Maintenant, la liste Python de type peut, au lieu d'accepter les types mixtes. Vous pouvez avoir une liste contenant un entier et une chaîne de caractères, à la fois la conservation de leur type. Ce que j'ai besoin est quelque chose de semblable à une liste, mais travaillant dans une matrice comme comportement.

Par conséquent, j'ai dû mettre en place mon propre type. J'avais deux choix pour la mise en œuvre interne: liste contenant les listes et les dictionnaires. Les deux solutions présentent des défauts:

  • liste de listes nécessite une synchronisation des différentes listes de tailles. La permutation de deux lignes est facile. La permutation de deux colonnes est moins facile. La suppression d'une ligne est facile.
  • dictionnaires (avec un n-uplet comme une clé) sont un peu mieux, mais vous devez définir les limites de votre clé (par exemple, vous ne pouvez pas insérer l'élément de 5,5 si votre matrice 3x3), et ils sont plus complexes à utiliser pour insérer, supprimer, ou de swap de colonnes ou de lignes.

Edit: précisions. La raison concrète sur pourquoi j'ai besoin de cette fonctionnalité est parce que je suis de la lecture de fichiers CSV. Une fois que je collectionne les valeurs à partir d'un fichier CSV (valeurs qui peuvent être chaîne de caractères, des entiers, des flottants) je voudrais effectuer l'échange, de suppression, d'insertion et d'autres opérations semblables. Pour cette raison, j'ai besoin d'une "matrice de liste".

Mes curiosités sont:

  • savez-vous si un Python de type de données de la fourniture de ce service existe déjà (peut-être dans un "non-batterie incluse" bibliothèque)?
  • pourquoi est ce type de données ne figurent pas dans la bibliothèque standard? Trop restreint d'intérêt peut-être?
  • Comment vous avez résolu ce besoin? Dictionnaire, une liste ou une autre solution plus intelligente?

OriginalL'auteur Stefano Borini | 2009-04-04