查找具有零值的行索引

2024-04-19 22:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,在此数组中:

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

我想要一个numpy数组,它指示整行有零:

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

到目前为止,我还是和where打交道

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

但我并不把输出描述成一个元组。第二个数组是什么?你知道吗


Tags: 图像numpynp数组wherearray元组aux
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]),)

在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]

这在Python2.7中可以正常工作,但在Python3.6中不行。你知道吗

对于Python3.6,您将需要一个附加步骤:

iter = map (f, aux)

for item in iter
   print (item)

你会得到同样的结果:

False
True
True
False

相关问题 更多 >