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 arr
een 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 numpy
gebruikt, 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 slice
eigenlijk 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.