代码之家  ›  专栏  ›  技术社区  ›  Evan Gertis

如何在python中有条件地对数组进行分区

  •  0
  • Evan Gertis  · 技术社区  · 4 年前

    允许 x 是NumPy数组。以下内容:

    (x > 1) and (x < 3)
    

    给出错误消息:

    ValueError:具有多个元素的数组的真值为 模棱两可的使用.any()或.all()

    我该如何解决这个问题?

    0 回复  |  直到 4 年前
        1
  •  3
  •   questionto42    4 年前

    如果 a b 是布尔NumPy数组 & 操作返回elementwise和其中的:

    a & b
    

    返回布尔值 大堆 。将其简化为单个布尔值 价值 ,使用任一

    (a & b).any()
    

    (a & b).all()
    

    注意:如果 b 非布尔型 阵列,请考虑 (a - b).any() (a - b).all() 相反


    根本原因

    NumPy开发人员认为在布尔上下文中没有一种通用的方法来评估数组:这可能意味着 True 如果 任何 元素为 真的 ,或者它可能意味着 真的 如果 全部的 元素是 真的 真的 如果数组的长度为非零,仅举三种可能性。

    由于不同的用户可能有不同的需求和不同的假设 NumPy开发人员拒绝猜测,而是决定筹集一个 ValueError 每当试图在布尔上下文中计算数组时。应用 and 到两个numpy数组会导致这两个数组在布尔上下文中求值(通过调用 __bool__ 在Python 3或 __nonzero__ 在Python中2)。

        2
  •  0
  •   Sham Fiorin    4 年前

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

    或者,我找到了另一种解决方案,它非常适合我想要的功能( The truth value of an array with more than one element is ambigous when trying to index an array ).

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

    numpy.logical_and(a, b)