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

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

我有一个函数,我使用条件 if 语句为 return 值计算两个浮点值,如下所示:

 # The function inputs are 2 lists of floats
 def math(list1,list2):
  value1=math(...)
  value2=more_math(...)
  z=value2-value1
  if np.any(z>0):
     return value1
  elif z<0:
     return value2

最初,我运行入题错误。我已经尝试使用 np.any() 和 np.all() 作为错误和问题的建议,但没有成功。我正在寻找一种方法来显式分析从 if 语句 if z>0 生成的布尔数组的每个元素(例如 [True,False] for list w/ 2 elements),如果甚至有可能。如果我使用 np.any(),当输入列表不是这种情况时,它始终是 returning value1。我的问题与 The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()? 类似,但没有人回答。

如果z是数组

  z=value2-value1
  if np.any(z>0):
     return value1
  elif z<0:
     return value2

z>0z<0 将是布尔数组。 np.any(z>0) 将该数组减少为一个 True/False 值,这在 if 语句中有效。但是 z<0 仍然是多值的,并且 elif 很头疼。

这是一个简单的例子:

a = np.array([1,2,3,4]) #for simplicity
b = np.array([0,0,5,5])
c = b.copy() 
condition = a>b  #returns an array with True and False, same shape as a
c[condition] = a[condition] #copy the values of a into c

Numpy 数组可以通过 TrueFalse 进行索引,这也允许覆盖保存在这些索引中的值。

注意:b.copy() 很重要,否则您在 b 中的条目也会发生变化。 (最好是你在没有 copy() 的情况下尝试一次,然后看看 b

会发生什么