[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