查找零值的行索引

时间:2018-06-18 18:48:36

标签: python arrays python-2.7 numpy

我有一个(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]))

但我并不把输出理解为元组。什么是第二个数组?

2 个答案:

答案 0 :(得分: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]),)

答案 1 :(得分:2)

在Python中使用Lambdas你可以像这样解决它:

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)

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

[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