2013-04-11 4 views
0

나는 파이썬을 사용하여 랜덤 스타 스펙트럼을 합하여 신호 대 노이즈 비율을 높이고 있습니다. 이 스펙트럼 헤더의 키워드 중 하나는 스펙트럼의 통합 시간을 포함합니다. 내가 스펙트럼을 합하면 결과 스펙트럼의 키워드가 내가 사용한 각 스펙트럼의 적분 시간의 합계로 업데이트되기를 원합니다. 그것은했다파이썬 사전에서 나온 합계 값

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'키가 있습니다.

+0

# 1 SpectrumHeader를 재 할당해야합니다, 그것을 해결 # 2 전에 다음 줄을 삽입하기 위해

. 입/출력의 간단한 예를 들려 줄 수 있습니까? – Bitwise

+0

당신은'kk'의 사용법을 놓치고있는 것처럼 보입니다. 현재 코드는'RandomSpectraList에있는 아이템에 대해'sum (SpectraFullList [item] [ 'head'] [ 'EXPTIME'])''done'kk' times와 같습니다. 아마도 의도 한 것이 아닙니다. 주주기의 반복 간에는 아무 변화가 없습니다. – viraptor

+0

@Bitwise : 입력 한 내용이 여러 이미지로 표시됩니다. 사전을 사용하여 불연속을 사용하여 사전 (SpectraFullList [FitsImageName] [ 'head'], SpectraFullList [item] [ 'spec'])으로 추출합니다. 내가 얻게되는 결과는 2 차 루프의 SpectrumHeader [ 'EXPTIME']의 첫 번째 인스턴스가 고려해야 할 스펙트럼에 대해 올바른 것이지만 다음 인스턴스에서는 2 차 루프의 마지막 실행의 합계가됩니다. – jorgehumberto

답변

1

라인 2에서 SpectrumHeader가 여전히 SpectraFullList의 요소를 가리키는 것을 알고 있습니까? 그것들은 정말로 같은 대상입니다. 따라서 # 2 행을 실행하면 기본적으로 SpectraFullList가 수정됩니다. 나는 그것이 당신이 원하는 것이 아니며 그것은 당신의 문제의 원인 일 수 있다고 생각합니다.

SpectrumHeader = SpectraFullList[item]['head'].copy() 
+0

그게 전부입니다! 문제 해결, 감사합니다! – jorgehumberto