riv*_*ivu 2 python arrays numpy
我有一个数组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])). 我怎样才能得到想要的答案?
作为@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]),)
Run Code Online (Sandbox Code Playgroud)
这有点难看,但它几乎是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
Run Code Online (Sandbox Code Playgroud)
您不仅可以测试相等性,还可以测试范围。
condition = (x[:,0]<3) & (x[:,1]>=1) & (x[:,2]>=0)
np.where(condition)
# (array([0, 3]),)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |