1

我觉得这个问题有一个简单的答案,但是我很难得到答案,而无需编写很多行代码。我希望有人能给我一些东西,让我在 python 中的列表理解方面更轻松。

我所拥有的是:

highest_peak = sorted([(self.Y[x]-self.background_model[x]) for x in peaks_index_list])[0]

如何从发生这种情况的 peaks_index_list 中获取最高峰值的索引 (x)?

index_of_highest_peak = sorted(???)[0]
index_of_second_highest_peak = sorted(???)[1]

谢谢你的帮助。

4

4 回答 4

3

如果你使用 numpy 你可以

import numpy as np
highest_peak = np.asarray(highest_peak)

max_index = highest_peak.argmax()
于 2013-02-15T16:41:00.153 回答
3

我认为峰高是self.Y[i] - self.background_model[i]峰指数i?如果您想要的只是最高峰的索引:

max(peaks_index_list, key=lambda i: self.Y[i] - self.background_model[i])

同样,如果您真的想要排序列表,请使用上面的键进行排序peaks_index_list

于 2013-02-15T16:44:12.030 回答
2

您应该对 (value,index) 形式的元组列表进行排序——

info = sorted((self.Y[x]-self.background_model[x],x) for x in peaks_index_list)

现在你的最高峰指数是:

info[-1][1]

或者你可以更好地解压它:

highest_peak_value,highest_peak_index = info[-1]

(因为我们没有指定,所以最高峰在排序列表中的最后一个reverse=True

第二高峰指数为:

info[-2][1]

等等。

于 2013-02-15T16:40:27.053 回答
2

(注:根据评论编辑)

将索引添加到正在排序的对象:

highest_peak, index = sorted([(self.Y[x]-self.background_model[x], x)
    for x in peaks_index_list])[0]

(最初我建议使用 enumerate(),这在您想要枚举元素的索引时非常有用。在这种情况下,peaks_index_list 已经是海报所追求的索引。)

highest_peak, index = sorted([(self.Y[x]-self.background_model[x], i)
    for i, x in enumerate(peaks_index_list]))[0]
于 2013-02-15T16:42:05.470 回答