Velocity Reviews > splitting numpy array unevenly

# splitting numpy array unevenly

Wanderer
Guest
Posts: n/a

 09-17-2012
I need to divide a 512x512 image array with the first horizontal and vertical division 49 pixels in. Then every 59 pixels in after that. hsplit and vsplit want to start at the edges and create a bunch of same size arrays. Is there a command to chop off different sized arrays?

Thanks

Martin De Kauwe
Guest
Posts: n/a

 09-17-2012
On Tuesday, September 18, 2012 8:31:09 AM UTC+10, Wanderer wrote:
> I need to divide a 512x512 image array with the first horizontal and vertical division 49 pixels in. Then every 59 pixels in after that. hsplit and vsplit want to start at the edges and create a bunch of same size arrays. Is there a command to chop off different sized arrays?
>
>
>
> Thanks

I don't know that I follow completely, but can't you just slice what you are after?

x = np.random.rand(512*512).reshape(512,512)
xx = x[0,:49]
And put the rest of the slices in a loop...?

Wanderer
Guest
Posts: n/a

 09-18-2012
On Monday, September 17, 2012 7:43:06 PM UTC-4, Martin De Kauwe wrote:
> On Tuesday, September 18, 2012 8:31:09 AM UTC+10, Wanderer wrote:
>
> > I need to divide a 512x512 image array with the first horizontal and vertical division 49 pixels in. Then every 59 pixels in after that. hsplit and vsplit want to start at the edges and create a bunch of same size arrays.Is there a command to chop off different sized arrays?

>
> >

>
> >

>
> >

>
> > Thanks

>
>
>
> I don't know that I follow completely, but can't you just slice what you are after?
>
>
>
> x = np.random.rand(512*512).reshape(512,512)
>
> xx = x[0,:49]
>
> And put the rest of the slices in a loop...?

I was trying to avoid the loop. I figured it out. hsplit and vsplit will work. I just need to give it a list of break points. I still need a loop though.

breakPoints = range(49,512,59)
rowArrays = hsplit(InputArray, breakPoints)
OutArrays = []
for r in rowArrays:
OutArrays.append(vsplit(r, breakPoints))

Hans Mulder
Guest
Posts: n/a

 09-19-2012
On 18/09/12 16:02:02, Wanderer wrote:
> On Monday, September 17, 2012 7:43:06 PM UTC-4, Martin De Kauwe wrote:
>> On Tuesday, September 18, 2012 8:31:09 AM UTC+10, Wanderer wrote:
>>> I need to divide a 512x512 image array with the first horizontal
>>> and vertical division 49 pixels in. Then every 59 pixels in after
>>> that. hsplit and vsplit want to start at the edges and create a
>>> bunch of same size arrays. Is there a command to chop off
>>> different sized arrays?

>> I don't know that I follow completely, but can't you just slice
>> what you are after?

>> x = np.random.rand(512*512).reshape(512,512)
>> xx = x[0,:49]

>> And put the rest of the slices in a loop...?

> I was trying to avoid the loop. I figured it out. hsplit and vsplit
> will work. I just need to give it a list of break points. I still
> need a loop though.

> breakPoints = range(49,512,59)
> rowArrays = hsplit(InputArray, breakPoints)
> OutArrays = []
> for r in rowArrays:
> OutArrays.append(vsplit(r, breakPoints))

breakPoints = range(49,512,59)
rowArrays = hsplit(InputArray, breakPoints)
OutArrays = [vsplit(r, breakPoints) for r in rowArrays]

In some sense, it's still a loop, but at least it doesn't look like one.

Hope this helps,

-- HansM