我有一个数组x=np.array([[0,1,2,],[0,0,0],[3,4,0],[1,2,3]])
,我希望得到x = [0,0,0]的索引,即1.我尝试np.where(x==[0,0,0])
得到(array([0, 1, 1, 1, 2]), array([0, 0, 1, 2, 2]))
。我怎样才能得到想要的答案?
答案 0 :(得分:4)
作为@transcranial解决方案,您可以使用np.all()
来完成这项工作。但np.all()
速度很慢,因此如果将其应用于大型阵列,速度将是您的关注点。
要测试特定值或特定范围,我会这样做。
x = np.array([[0,1,2],[0,0,0],[3,4,0],[1,2,3],[0,0,0]])
condition = (x[:,0]==0) & (x[:,1]==0) & (x[:,2]==0)
np.where(condition)
# (array([1, 4]),)
它有点难看,但几乎是np.all()
解决方案的两倍。
In[23]: %timeit np.where(np.all(x == [0,0,0], axis=1) == True)
100000 loops, best of 3: 6.5 µs per loop
In[22]: %timeit np.where((x[:,0]==0)&(x[:,1]==0)&(x[:,2]==0))
100000 loops, best of 3: 3.57 µs per loop
你不仅可以测试平等,还可以测试范围。
condition = (x[:,0]<3) & (x[:,1]>=1) & (x[:,2]>=0)
np.where(condition)
# (array([0, 3]),)
答案 1 :(得分:1)
可能有点贵
x.tolist().index([0,0,0])
应该工作
要适应所有匹配的索引而不是一个,请使用
xL = x.tolist()
indices = [i for i, x in enumerate(xL) if x == [0,0,0]]
(灵感来自this answer)
答案 2 :(得分:0)
import numpy as np
x = np.array([[0,1,2],[0,0,0],[3,4,0],[1,2,3]])
np.where(np.all(x == [0,0,0], axis=1) == True)[0].tolist()
# outputs [1]
np.all
测试axis=1
上所有元素的相等性,在这种情况下输出array([False, True, False, False])
。然后使用np.where
获取指向此位置的索引。