ValueError: 数组有多个元素的真值不明确。使用a.any()或a.all()

32 浏览
0 Comments

ValueError: 数组有多个元素的真值不明确。使用a.any()或a.all()

假设 x 是一个NumPy数组。以下代码:

(x > 1) and (x < 3)

会出现以下错误信息:

ValueError: The truth value of an array with more than one element is

ambiguous. Use a.any() or a.all()

如何解决这个问题?

admin 更改状态以发布 2023年5月21日
0
0 Comments

我也遇到了同样的问题(即使用多条件进行索引,这里是在特定日期范围内查找数据)。(a-b).any()(a-b).all() 似乎不能工作,至少对我来说是这样。

作为替代方法,我找到了另一个完美解决我所需功能的解决方案(当尝试索引数组时,数组的多个元素的真值是含糊不清的)。

与上述建议代码不同,使用以下代码:

numpy.logical_and(a, b)

0
0 Comments

如果ab是布尔型的NumPy数组,&操作会返回它们的逐元素与运算结果:

a & b

这将返回一个布尔型数组。如果要将其简化为一个布尔值,可以使用以下两种方式之一:

(a & b).any()


(a & b).all()

注意:如果ab是非布尔型数组,请考虑使用(a - b).any()或者(a - b).all()


原理

NumPy开发者认为,对于数组进行布尔型操作没有一个通用的理解方式:它可能是表示只要有任意一个元素为True,就返回True,也可能是表示只有所有元素都为True时才返回True,还可能是表示只要数组的长度不为零,就返回True,仅仅是举例而已,还有其他可能性。

由于不同的用户需要和假设不同,NumPy开发者不愿猜测,而是决定在尝试对数组进行布尔操作时引发一个ValueError异常。对两个numpy数组应用and操作会使这两个数组在布尔上下文中被评估(通过在Python3中调用__bool__或在Python2中调用__nonzero__)。

0