4 votes

Extraction de plusieurs ensembles de lignes/colonnes d'un tableau numpy 2D

J'ai un tableau numpy 2D duquel je veux extraire plusieurs ensembles de lignes/colonnes.

# img is 2D array
img = np.arange(25).reshape(5,5)
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, 24]])

Je connais la syntaxe pour extraire un ensemble de lignes/colonnes. Ce qui suit va extraire les 4 premières lignes et les 3ème et 4ème colonnes comme indiqué ci-dessous

img[0:4, 2:4]
array([[ 2,  3],
       [ 7,  8],
       [12, 13],
       [17, 18]])

Cependant, quelle est la syntaxe si je veux extraire plusieurs ensembles de lignes et/ou de colonnes ? J'ai essayé ce qui suit, mais cela conduit à un invalid syntax error

img[[0,2:4],2] 

Le résultat que je cherche à obtenir avec la commande ci-dessus est le suivant

array([[ 2],
       [12],
       [17]])

J'ai essayé de faire des recherches sur ce sujet, mais elles n'aboutissent qu'à des résultats pour un ensemble de lignes/colonnes ou à l'extraction de lignes/colonnes discrètes, ce que je sais faire, comme utiliser np.ix.

Pour situer le contexte, le tableau 2D avec lequel je travaille actuellement a des dimensions de ~800X1200, et à partir de ce tableau, je veux extraire plusieurs plages de lignes et de colonnes en une seule fois. Donc quelque chose comme img[[0:100, 120:210, 400, 500:600], [1:450, 500:550, 600, 700:950]] .

4voto

mozway Points 233

IIUC, vous pouvez utiliser numpy.r_ pour générer les indices à partir de la tranche :

img[np.r_[0,2:4][:,None],2] 

sortie :

array([[ 2],
       [12],
       [17]])

intermédiaires :

np.r_[0,2:4]
# array([0, 2, 3])

np.r_[0,2:4][:,None]  # variant: np.c_[np.r_[0,2:4]]
# array([[0],
#        [2],
#        [3]])

1voto

Tobias Molenaar Points 386

Vous pouvez créer vos tranches avec numpy.r_ :

np.r_[0:2, 4]
# array([0,1,4])

Ensuite, vous pouvez obtenir les lignes et les colonnes spécifiques comme suit :

rows = np.r_[0:2, 4]
cols = np.r_[0, 2:4]
img[rows][:, cols]
# array([[ 0,  2,  3],
#       [ 5,  7,  8],
#       [20, 22, 23]])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X