web-dev-qa-db-fra.com

Python: découper un tableau multidimensionnel

Python et numpy. J'ai découvert comment découper une séquence en 1 dimension: arr[start:end], et accéder à un élément du tableau: el = arr[row][col].

Essayer quelque chose comme slice = arr[0:2][0:2] (où arr est un tableau numpy) ne me donne pas les 2 premières lignes et colonnes, mais répète les 2 premières lignes. Qu'est-ce que je viens de faire et comment puis-je trancher une autre dimension?

41
SlightlyCuban

Si vous utilisez numpy, c'est simple:

slice = arr[:2,:2]

ou si vous voulez les 0,

slice = arr[0:2,0:2]

Vous obtiendrez le même résultat.

* notez que slice est en fait le nom d'un type intégré. Généralement, je conseillerais de donner à votre objet un "nom" différent.


Une autre façon, si vous travaillez avec des listes de listes *:

slice = [arr[i][0:2] for i in range(0,2)]

(Notez que les 0 ici sont inutiles: [arr[i][:2] for i in range(2)] fonctionnerait aussi.).

Ce que j'ai fait ici est que je prends chaque rangée désirée 1 à la fois (arr[i]). Je coupe ensuite les colonnes que je veux de cette ligne et les ajoute à la liste que je construis.

Si vous essayez naïvement: arr[0:2], Vous obtenez les deux premières lignes et si vous redécoupez arr[0:2][0:2], Vous ne faites que trancher de nouveau les deux premières lignes.

* Cela fonctionne aussi pour les tableaux numpy, mais ce sera lent comparé à la solution "native" que j'ai postée ci-dessus.

59
mgilson