[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