[Numpy-discussion] Count occurrences in a nested ndarray

Dewald Pieterse dewald.pieterse@gmail....
Wed Oct 20 20:01:47 CDT 2010


On Wed, Oct 20, 2010 at 1:32 AM, Lutz Maibaum <lutz.maibaum@gmail.com>wrote:

> On Oct 19, 2010, at 6:09 PM, Dewald Pieterse wrote:
> > for xiter in range(xindex):
> >       for yiter in range(yindex):
> >               if edges[xiter,yiter,:] == [255,0,0]:
> >                       groenpixelarea = groenpixelarea + 1
> >               if edges[xiter,yiter,:] == [0,255,0]:
> >                       rooipixelarea = rooipixelarea + 1
> >               if edges[xiter,yiter,:] == [0,0,255]:
> >                       bloupixelarea = bloupixelarea + 1
> >
> > results in:
> >
> >     16 for xiter in range(xindex):
> >      17         for yiter in range(yindex):
> > ---> 18                 if edges[xiter,yiter,:].any() == [255,0,0]:
> >      19                         groenpixelarea = groenpixelarea + 1
> >      20                 if edges[xiter,yiter,:] == [0,255,0]:
> >
> > ValueError: The truth value of an array with more than one element is
> ambiguous. Use a.any() or a.all()
> > WARNING: Failure executing file: <analiseerverwerkteprent.py>
>
>
> The array comparison results in an array of booleans, which cannot be used
> as a condition in the if statement. You could use
>
> if alltrue(edges[xiter,yiter,:] == [255,0,0]):
>    groenpixelarea = groenpixelarea + 1
>

This worked.


> There are probably much faster ways to do this that do not require
> iterating over all pixels. You could try
>
> groenpixelarea = sum(alltrue(a.reshape((-1,3)) == array([0,0,255]),
> axis=1))
>
> This worked way faster, awesome.


> Hope this helps,
>
>  Lutz
>
>
Thanks for all the help.

-- 
Dewald Pieterse
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.scipy.org/pipermail/numpy-discussion/attachments/20101021/5c066591/attachment-0001.html 


More information about the NumPy-Discussion mailing list