On 22/09/12 01:07, Bala subramanian wrote:
Friends,
May i know why do get a Valuerror if i check any value in a is between
3.0 to 5.0 ?
import numpy as np
a=np.array([ 2.5,  2.6,  3.0 ,  3.5,  4.0 ,  5.0 ])
(a>  7).any()
False

This calculates an array of bools, then calls any() on it.

py> a > 7
array([False, False, False, False, False, False], dtype=bool)
py> (a > 7).any()
False


(a>  4).any()
True

This also builds an array of bools, then calls any():

py> a > 4
array([False, False, False, False, False,  True], dtype=bool)
py> (a > 4).any()
True



(3<  a<  5).any()
Traceback (most recent call last):
   File "<stdin>", line 1, in<module>
ValueError: The truth value of an array with more than one element is
ambiguous. Use a.any() or a.all()


This tries to calculate:

(3 < a) and (a < 5)

py> 3 < a
array([False, False, False,  True,  True,  True], dtype=bool)
py> a < 5
array([ True,  True,  True,  True,  True, False], dtype=bool)

but combining them with the "and" operator is ambiguous:

py> (3 < a) and (a < 5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element
is ambiguous. Use a.any() or a.all()

Since the boolean "and" of the two arrays never gets calculated,
the any method never gets called. You could do:


py> (3 < a).any() and (a < 5).any()
True

which I think does what you want.



--
Steven
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to