Quelqu'un sait-il comment extraire une colonne d'un tableau multidimensionnel en Python ?
Réponses
Trop de publicités?Eh bien, un peu tard ...
Si les performances sont importantes et que vos données sont de forme rectangulaire, vous pouvez également les stocker en une seule dimension et accéder aux colonnes par découpage régulier, par exemple ...
A = [[1,2,3,4],[5,6,7,8]] #< assume this 4x2-matrix
B = reduce( operator.add, A ) #< get it one-dimensional
def column1d( matrix, dimX, colIdx ):
return matrix[colIdx::dimX]
def row1d( matrix, dimX, rowIdx ):
return matrix[rowIdx:rowIdx+dimX]
>>> column1d( B, 4, 1 )
[2, 6]
>>> row1d( B, 4, 1 )
[2, 3, 4, 5]
Ce qui est génial, c'est que c'est très rapide. Cependant les indices négatifs ne fonctionnent pas ici ! Vous ne pouvez donc pas accéder à la dernière colonne ou ligne par l'index -1.
Si vous avez besoin d'une indexation négative, vous pouvez adapter un peu les fonctions d'accès, par ex.
def column1d( matrix, dimX, colIdx ):
return matrix[colIdx % dimX::dimX]
def row1d( matrix, dimX, dimY, rowIdx ):
rowIdx = (rowIdx % dimY) * dimX
return matrix[rowIdx:rowIdx+dimX]
Malgré l'utilisation de zip(*iterable)
pour transposer une liste imbriquée, vous pouvez également utiliser la méthode suivante si les listes imbriquées sont de longueur différente :
map(None, *[(1,2,3,), (4,5,), (6,)])
résulte en :
[(1, 4, 6), (2, 5, None), (3, None, None)]
La première colonne est ainsi :
map(None, *[(1,2,3,), (4,5,), (6,)])[0]
#>(1, 4, 6)
Je préfère l'indice suivant : avoir la matrice nommée matrix_a
et utiliser column_number
par exemple :
import numpy as np
matrix_a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
column_number=2
# you can get the row from transposed matrix - it will be a column:
col=matrix_a.transpose()[column_number]
- Réponses précédentes
- Plus de réponses