我有一个(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]))
但我并不把输出理解为元组。什么是第二个数组?
答案 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