我使用嵌套列表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]
我不了解这种行为,请您解释一下我做错了什么吗?谢谢。
答案 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
的结果。那不会给您索引值在数组中的位置。