获取两个条件(在不同数组上)为真的数组索引

时间:2011-07-04 10:52:19

标签: python numpy

我有两个numpy数组:ab。我想选择a == 1b == 0的所有索引。

也就是说,如果我有以下数组:

a = [0, 1, 3, 5, 1, 1, 2]

b = [1, 0, 2, 5, 3, 0, 6]

我想得到以下指数:

[1, 5]

我该如何在numpy中做到这一点?我尝试过使用以下内容(快速参考指南建议显示numpy,matlab和IDL之间的差异):

(a == 1 and b == 0).nonzero()

但这给出了关于真值的含糊不清的错误。

有什么想法吗?

4 个答案:

答案 0 :(得分:12)

In []: a= array([0, 1, 3, 5, 1, 1, 2])
In []: b= array([1, 0, 2, 5, 3, 0, 6])
In []: logical_and(a== 1, b== 0).nonzero()[0]
Out[]: array([1, 5])

显然这也可行:

In []: ((a== 1)& (b== 0)).nonzero()[0]
Out[]: array([1, 5])

答案 1 :(得分:5)

这是一种方式:

In [75]: import numpy as np

In [76]: a = np.array([0, 1, 3, 5, 1, 1, 2])

In [77]: b = np.array([1, 0, 2, 5, 3, 0, 6])

In [78]: np.argwhere((a==1) & (b==0)).flatten()
Out[78]: array([1, 5])

答案 2 :(得分:1)

尝试使用以下代码:

import numpy

a = numpy.array([0, 1, 3, 5, 1, 1, 2])
b = numpy.array([1, 0, 2, 5, 3, 0, 6])

res =  [i for i,v in enumerate(zip(a,b)) if v == (1,0)]

print res

答案 3 :(得分:0)

我不是numpy错误的专家,但这是我对常规python列表所做的事情,也许你也可以在这里使用它:

>>> a = [0, 1, 3, 5, 1, 1, 2]
>>> b = [1, 0, 2, 5, 3, 0, 6]
>>> zip(a, b)
[(0, 1), (1, 0), (3, 2), (5, 5), (1, 3), (1, 0), (2, 6)]
>>> for i, tup in enumerate(zip(a, b)):
...     if tup[0]==1 and tup[1]==0:
...         print i
...
1
5
>>>

希望这有帮助