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
无需对所有最小值进行排序,您可以获取最低的对:
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
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。