我有两个numpy数组:a
和b
。我想选择a == 1
和b == 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()
但这给出了关于真值的含糊不清的错误。
有什么想法吗?
答案 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
>>>
希望这有帮助