首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中找到列表的最小点

如何在python中找到列表的最小点
EN

Stack Overflow用户
提问于 2020-03-04 13:37:57
回答 2查看 69关注 0票数 1
代码语言:javascript
复制
    def get_minima(array):

sdiff = np.diff(np.sign(np.diff(array)))
rising_1 = (sdiff == 2) 
rising_2 = (sdiff[:-1] == 1) & (sdiff[1:] == 1) 
rising_all = rising_1 
rising_all[1:] = rising_all[1:] | rising_2 
min_ind = np.where(rising_all)[0] + 1 
minima = list(zip(min_ind, array[min_ind]))

return sorted(minima, key=lambda x: x[1])

通过使用我拥有的数据数组运行这段代码,它将产生:

代码语言:javascript
复制
[(59, 7.958373616052042e-10),
 (69, 6.5364637051479655e-09),
 (105, 1.0748381102806489e-08),
 (88, 2.953895857338913e-07),
 (27, 9.083111768048306e-07)]

这很好--它是我数据集中的所有最小值。但我只需要存储最小值--即这个特定示例中的(59,7.958373616052042e-10)点。我想不出该怎么做。我尝试了一些使用np.amin和布尔比较的方法,但是我对表示法和语法非常困惑,因为现在它是一个列表数组,我以前从未真正使用过它。

感谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-04 14:06:51

与其对所有的最小值进行排序,您还可以得到最低的一对:

代码语言:javascript
复制
def get_minima(array):
    sdiff = np.diff(np.sign(np.diff(array)))
    rising_1 = (sdiff == 2) 
    rising_2 = (sdiff[:-1] == 1) & (sdiff[1:] == 1) 
    rising_all = rising_1 
    rising_all[1:] = rising_all[1:] | rising_2 
    min_ind = np.where(rising_all)[0] + 1 
    minima = list(zip(min_ind, array[min_ind]))
    return min(minima, key=lambda pair: pair[1])

例如:

代码语言:javascript
复制
minima = [(59, 7.958373616052042e-10),
 (69, 6.5364637051479655e-09),
 (105, 1.0748381102806489e-08),
 (88, 2.953895857338913e-07),
 (27, 9.083111768048306e-07)]

minimum = min(minima, key=lambda pair: pair[1])
print(minimum)

>>> (59, 7.958373616052042e-10)
票数 1
EN

Stack Overflow用户

发布于 2020-03-04 13:47:39

看起来太简单了但你试过了吗?

代码语言:javascript
复制
minima = list(zip(min_ind, array[min_ind]))
minima.sort(key=lambda x: x[1])
return minima[0]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60527392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档