【问题标题】:Find rows indexes with zero values查找具有零值的行索引
【发布时间】:2018-11-27 16:04:32
【问题描述】:

我有一个 (N,2) 数组表示一些图像坐标。我只想提取两个值为零的行。

例如在这个数组中:

aux = np.array([[0.,-0.0001], [0.0,0.0], [0.0,0.0], [123,0.0]])

我想要一个指示整行为零的 numpy 数组:

结果:np.array([1,2])

直到现在,我还在尝试where

np.where(aux==0)
(array([0, 1, 1, 2, 2, 3]), array([0, 0, 1, 0, 1, 1]))

但我不明白输出是一个元组。第二个数组是什么?

【问题讨论】:

    标签: python arrays python-2.7 numpy


    【解决方案1】:

    在 Python 中使用 Lambda 可以这样解决:

    aux = np.array ([[0., - 0.0001], [0.0,0.0], [0.0,0.0], [123,0.0]])
    

    首先,您必须使用 lambda 表达式定义逻辑, 您正在寻找的条件是:

    f = lambda x: x [0]==0 and x [1] == 0
    

    map() 是一个 python 函数,它将 lambda 表达式应用于每个元素

    map (f, aux)
    

    输出将是一个布尔向量,条件满足时为 True

    [False, True, True, False]
    

    这适用于 Python 2.7,但不适用于 Python 3.6。

    对于 python 3.6,您将需要一个额外的步骤:

    iter = map (f, aux)
    
    for item in iter
       print (item)
    

    你会得到同样的结果:

    False
    True
    True
    False
    

    【讨论】:

      【解决方案2】:

      我认为你可以使用np.all

      np.all(aux == 0, axis=1)
      

      这将返回一个布尔数组,其中您的两个值是0

      array([False,  True,  True, False], dtype=bool)
      

      您可以使用np.where 提取相应索引的数组(匹配您想要的输出):

      np.where(np.all(aux == 0, axis=1))
      
      (array([1, 2]),)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-14
        • 1970-01-01
        • 2018-10-13
        • 1970-01-01
        • 2021-04-04
        • 2017-12-31
        • 1970-01-01
        相关资源
        最近更新 更多