0

Python を使用してランダムな星のスペクトルを合計し、信号対雑音比を高めています。これらのスペクトル ヘッダーのキーワードの 1 つに、スペクトルの積分時間が含まれています。スペクトルを合計すると、結果のスペクトルのキーワードが、使用した各スペクトルの積分時間の合計で更新されます。そのために、次のコードを使用します。

for kk in range(0,NumberOfSpectra):             # main cycle
       TotalIntegrationTime = 0.0
       for item in RandomSpectraList:                       # secondary cycle
           SpectrumHeader = SpectraFullList[item]['head']         #1
           TotalIntegrationTime += SpectrumHeader['EXPTIME']

       SpectrumHeader['EXPTIME'] = TotalIntegrationTime               #2

    SaveHeaderFunction(SpectrumHeader, kk)

私が抱えている問題は、メイン サイクルがループしたSpectrumHeaderときに、#1 で再割り当てしてもリセットされず、#2 の値が表示されることです。なぜこれが起こるのか、それを修正する方法についてのアイデアはありますか?

NumberOfSpectraはユーザーによって提供され、RandomSpectraList名前によるランダム スペクトルのリストです。SpectraFullListスペクトルを含み、キー 'head' と 'spec' を持ちます。

4

1 に答える 1

1

2 行目で、SpectrumHeader がまだ SpectraFullList の要素を指しているという事実に気付きましたか? それらは本当に同じオブジェクトです。したがって、2 行目を実行すると、本質的に SpectraFullList が変更されます。それはあなたが望んでいるものではなく、それがあなたの問題の原因であると思います。

これを解決するには、#2 の前に次の行を挿入します。

SpectrumHeader = SpectraFullList[item]['head'].copy()
于 2013-04-11T13:38:38.353 に答える