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

新手上路,请多包涵

x 成为 NumPy 数组。以下:

 (x > 1) and (x < 3)

给出错误信息:

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

我该如何解决?

原文由 Homunculus Reticulli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

如果 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 。将 and 应用于两个 numpy 数组会导致在布尔上下文中评估两个数组(通过在 Python3 中调用 __bool__ 或在 Python2 中调用 __nonzero__ )。

原文由 unutbu 发布,翻译遵循 CC BY-SA 4.0 许可协议

我有同样的问题(即多条件索引,这里是在特定日期范围内查找数据)。 (a-b).any()(a-b).all() 似乎不起作用,至少对我而言。

或者,我找到了另一种解决方案,它可以完美地满足我想要的功能( 尝试索引数组时,具有多个元素的数组的真值是不明确的)。

不要使用上面建议的代码,而是使用:

 numpy.logical_and(a, b)

原文由 Yeqing Zhang 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题