Skip to main content
 首页 » 编程设计

python之numpy.where 函数有什么问题

2025年05月04日28fff_TT

我有一个 numpy 数组(2 个元素列表的列表)a 下面给出,我有一个 2 个元素列表 [30.94, 0.] 我会喜欢寻找。

当我执行以下操作时,我没有得到想要的结果。为什么?

import numpy as np 
a = np.array([[  5.73,   0.  ], 
              [ 57.73,  10.  ], 
              [ 57.73,  20.  ], 
              [ 30.94,   0.  ], 
              [ 30.94,  10.  ], 
              [ 30.94,  20.  ], 
              [  4.14,   0.  ], 
              [  4.14,  10.  ]]) 
 
np.where(a==np.array([30.94, 0.])) 

但是我明白了

(array([0, 3, 3, 4, 5, 6]), array([1, 0, 1, 0, 0, 1])) 

这不是真的。

请您参考如下方法:

正如 Divakar 所暗示的,a == np.array([30.94, 0.]) 不是您所期望的。广播数组,并按元素进行比较。这是结果:

array([[False,  True], 
       [False, False], 
       [False, False], 
       [ True,  True], 
       [ True, False], 
       [ True, False], 
       [False,  True], 
       [False, False]], dtype=bool) 

不过,我们可以通过np.all得到我们想要的:

>>> np.all(a==np.array([30.94, 0.]), axis=-1) 
array([False, False, False,  True, False, False, False, False], dtype=bool) 
>>> np.where(_) 
(array([3]),) 

因此您可以看到第 3 行符合预期。请注意,将 == 与 float 一起使用的常见注意事项将在此处适用。