【问题标题】:How find minimum point of array of lists in python如何在python中找到列表数组的最小点
【发布时间】:2020-06-17 00:35:07
【问题描述】:
    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 并进行布尔比较的东西,但我对符号和语法感到很困惑,因为现在它是一个列表数组,我以前从未真正使用过它。
感谢任何帮助!

【问题讨论】:

  • 当你说最小值时,你是指7.958373616052042e-10 忽略第一个元素的第二个元素吗?
  • 嘿!我的意思是索引的压缩列表(此处为 59)和与该索引关联的值(此处为 7.9583...e-10)

标签: python arrays python-3.x list minimum


【解决方案1】:

您可以只获得最低的一对,而不是对所有最小值进行排序:

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)

【讨论】:

    【解决方案2】:

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

    minima = list(zip(min_ind, array[min_ind]))
    minima.sort(key=lambda x: x[1])
    return minima[0]
    

    【讨论】:

      猜你喜欢
      • 2021-05-24
      • 2017-03-09
      • 1970-01-01
      • 2020-11-28
      • 1970-01-01
      • 2013-03-30
      • 2014-06-01
      • 2022-10-13
      • 2011-03-30
      相关资源
      最近更新 更多