Как найти минимальную точку массива списков в python - PullRequest
1 голос
/ 04 марта 2020
    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 и проведением логического сравнения, но я сильно запутался с нотацией и синтаксисом, так как теперь это массив списков, и я никогда не работал с этим раньше.
Благодарю за любую помощь!

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Вместо сортировки всех минимумов вы можете просто получить младшую пару:

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)
0 голосов
/ 04 марта 2020

Ну, это выглядит слишком просто, но вы пробовали это?

minima = list(zip(min_ind, array[min_ind]))
minima.sort(key=lambda x: x[1])
return minima[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...