splitting numpy array unevenly

Hans Mulder hansmu at xs4all.nl
Wed Sep 19 02:26:46 EDT 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))

How about a list display:

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



More information about the Python-list mailing list