Python: een multidimensionale array in stukjes snijden

Ik ben nieuw bij Python en numpy. Ik heb ontdekt hoe ik 1 dimensionale reeks kan segmenteren: arr[start:end], en toegang krijg tot een element in de array: el = arr[row][col].

Als ik iets probeer als slice = arr[0:2][0:2](waarbij arreen numpy array is) krijg ik niet de eerste 2 rijen en kolommen, maar herhaalt de eerste 2 rijen. Wat heb ik zojuist gedaan en hoe kan ik langs een andere dimensie snijden?


Antwoord 1, autoriteit 100%

Als u numpygebruikt, is dit eenvoudig:

slice = arr[:2,:2]

of als je de nullen wilt,

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

Je krijgt hetzelfde resultaat.

*merk op dat sliceeigenlijk de naam is van een ingebouwd type. Over het algemeen zou ik adviseren om uw object een andere “naam” te geven.


Een andere manier, als u werkt met lijsten met lijsten*:

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

(Merk op dat de nullen hier niet nodig zijn: [arr[i][:2] for i in range(2)]zou ook werken.).

Wat ik hier deed, is dat ik elke gewenste rij 1 tegelijk neem (arr[i]). Ik snijd vervolgens de kolommen die ik uit die rij wil en voeg deze toe aan de lijst die ik aan het bouwen ben.

Als je naïef probeert: arr[0:2]Je krijgt de eerste 2 rijen die je vervolgens opnieuw snijdt arr[0:2][0:2], je snijdt gewoon de eerste twee rijen opnieuw.

*Dit werkt ook voor numpy-arrays, maar het zal traag zijn in vergelijking met de “native” oplossing die ik hierboven heb gepost.

Other episodes