P.lopezh
P.lopezh

Reputation: 21

Numpy: ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

I've been trying to use numpy on Python to plot some data. However I'm getting an error I don't understand:

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

And this is the line supposed to cause the error (the third line):

def T(z):
for i in range(3):
    if (z <= z_tbl[i+1]):
        return T0_tbl[i]+a_tbl[i]*(z-z_tbl[i])
return 0

Those lists are just some lists of integers, and z is an integer too

How can i fix it?

Upvotes: 1

Views: 19500

Answers (2)

Gursel Karacor
Gursel Karacor

Reputation: 1167

For the if condition use this

if (z <= z_tbl.item(i+1)):

Upvotes: 0

mgilson
mgilson

Reputation: 309929

Either z or z_tbl[i+1] is a numpy array. For numpy arrays, rich comparisons (==, <=, >=, ...) return another (boolean) numpy array.

bool on a numpy array will give you the exception that you are seeing:

>>> a = np.arange(10)
>>> a == 1
array([False,  True, False, False, False, False, False, False, False, False], dtype=bool)
>>> bool(a == 1)
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()

Numpy is trying to tell you what to do:

>>> (a == 1).any()  # at least one element is true?
True
>>> (a == 1).all()  # all of the elements are true?
False

Upvotes: 5

Related Questions