开发者社区> 问答> 正文

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

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])

通过将这段代码与我拥有的数据数组一起运行,它会产生:

[(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进行了一些尝试,并进行了布尔比较,但我对表示法和语法感到困惑,因为现在它是一个列表数组,我以前从未真正使用过。 感谢任何帮助!

问题来源:stackoverflow

展开
收起
is大龙 2020-03-25 09:22:47 3488 0
2 条回答
写回答
取消 提交回答
  • 代码改变世界,我们改变代码

    image.png

    2020-03-26 16:08:02
    赞同 展开评论 打赏
  • 无需对所有最小值进行排序,您可以获取最低的对:

    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])
    

    例如:

    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)
    

    回答来源:stackoverflow

    2020-03-25 09:22:55
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载