np.where返回错误的索引

时间:2020-07-29 12:40:46

标签: python python-3.x numpy

我使用嵌套列表wl_list。 我想找到0.21与列表中第二个值之间最小残差的索引。为了说明我的意思,请看以下内容:

In [107]: wl_list 
Out[107]: 
[[0.21, 0.20033118267365396],
 [0.21, 0.20108968331942148],
 [0.21, 0.2018455976996333],
 [0.21, 0.20259889407493714],
 [0.21, 0.20334954134171523],
 [0.21, 0.20409750903553264],
 [0.21, 0.20484276733424645],
 [0.21, 0.20558528706077894],
 [0.21, 0.2063250396855564],
 [0.21, 0.20706199732861758],
 [0.21, 0.20779613276139344],
 [0.21, 0.20852741940816347]]

In [108]: np.diff(wl_list)
Out[108]: 
array([[-0.00966882],
       [-0.00891032],
       [-0.0081544 ],
       [-0.00740111],
       [-0.00665046],
       [-0.00590249],
       [-0.00515723],
       [-0.00441471],
       [-0.00367496],
       [-0.002938  ],
       [-0.00220387],
       [-0.00147258]])

In [109]: np.min(np.abs(np.diff(wl_list)))
Out[109]: 0.0014725805918365253

然后在这种情况下,我想使用np.where来获取最后一个索引,但是我得到的是:

In [110]: np.where(np.min(np.abs(np.diff(wl_list))))
Out[110]: (array([0]),)

In [111]: i = np.where(np.min(np.abs(np.diff(wl_list))))[0][0]

In [112]: wl_list[i]
Out[112]: [0.21, 0.20033118267365396]

我不了解这种行为,请您解释一下我做错了什么吗?谢谢。

1 个答案:

答案 0 :(得分:3)

您可以在此处使用argmin(在重复最小值的情况下,它将返回第一个匹配项):

$leaves = Leave::latest('users')->limit(5)

ix = np.abs(np.diff(wl_list)).argmin() # 11 wl_list[ix] # array([0.21 , 0.20852742]) 为您提供满足条件的索引,即数组中有np.where的索引。不过,您的输入只是True的结果。那不会给您索引值在数组中的位置。