[Numpy-discussion] Count occurrences in a nested ndarray

Lutz Maibaum lutz.maibaum at gmail.com
Tue Oct 19 21:32:41 EDT 2010


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

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))

Hope this helps,

  Lutz




More information about the NumPy-Discussion mailing list