【问题标题】:Numpy indexing with multiple clauses带有多个子句的 Numpy 索引
【发布时间】:2021-06-10 13:15:47
【问题描述】:

当索引一个 numpy 数组时,我可以选择所有符合特定条件的条目。例如,对于 3 的倍数:

array = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15], [16,17,18,19,20]])
array[array%3 == 0]

现在,如果我想选择值是 3 倍数且小于 10 的所有条目,我希望只在括号中添加 andor 就足够了。但是,运行以下代码时出现错误:

array = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15], [16,17,18,19,20]])
array[array%3 == 0 and array<10]

ValueError:具有多个元素的数组的真值是 模糊的。使用 a.any() 或 a.all()

在索引数组时,编写此类逻辑子句的正确方法是什么?

【问题讨论】:

    标签: python arrays numpy indexing


    【解决方案1】:

    您可以使用&amp; 运算符:

    >>> array[(array%3 == 0) & (array<10)]
    array([3, 6, 9])
    

    不要忘记用括号将每个操作数括起来,否则会出错。

    【讨论】:

    • 这是首选答案
    【解决方案2】:

    我的第一个猜测是分两步完成。

    1. 能被 3 整除
    array = np.array([[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]])
    array = array[array%3 == 0]
    
    1. 小于10
    array[array<10]
    

    但我确信有一种方法可以在一行中做到这一点。

    【讨论】:

      猜你喜欢
      • 2013-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2014-06-04
      • 2013-01-09
      • 1970-01-01
      • 2011-01-01
      相关资源
      最近更新 更多