0

我正在使用 Python 对随机星光谱求和以增加它们的信噪比。这些光谱标题的关键字之一包含光谱的积分时间。当我对光谱求和时,我希望用我使用的每个光谱的积分时间总和来更新结果光谱的关键字。为此,我使用以下代码:

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 回答