1

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?

P.lopezh
  • 21
  • 1
  • 1
  • 2

2 Answers2

5

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
mgilson
  • 300,191
  • 65
  • 633
  • 696
  • So how is that my z_tbl is a numpy array? I just don't understand why the comparison returns another array. It should return a boolean, shoudln't it? – P.lopezh Feb 28 '16 at 22:23
0

For the if condition use this

if (z <= z_tbl.item(i+1)):
Gursel Karacor
  • 1,137
  • 11
  • 21