1

この質問には簡単な答えがあるように感じますが、何行ものコードを書かなくても答えを得るのに苦労しています。私は誰かがPythonのリスト内包表記に関して私の人生を楽にする何かを私に与えてくれることを望んでいました。

私が持っているのはこれです:

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

これが発生するpeaks_index_listからhighest_peakのインデックス(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

(注:コメントに基づいて編集)

並べ替えるオブジェクトにインデックスを追加します。

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 に答える
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

2番目に高いピークインデックスは次のとおりです。

info[-2][1]

等々。

于 2013-02-15T16:40:27.053 に答える