2014-03-19 7 views
0

저는 PyFITS를 사용하여 두 개의 오래된 FITS 파일 중 새로운 FITS 파일을 만들려고합니다.어떻게 PyFITS로 FITS 데이터 배열을 업데이트하나요?

import pyfits 
from sys import stdout 
from sys import argv 
import time 

file1 = argv[1] 
file2 = argv[2] 

hdu1 = pyfits.open(file1) 
hdu2 = pyfits.open(file2) 
new0 = hdu1[0] 
new1 = hdu1[0] 

sci1 = hdu1[0].data 
sci2 = hdu2[0].data 

for r in range(0, len(sci1)): 
    for c in range(0, len(sci1[r])): 
     add = sci1[r][c] + sci2[r][c] 
     new0.data[r][c] = add 
for r in range(0, len(sci1)): 
    for c in range(0, len(sci1[r])): 
     print "(" + str(r) + ", " + str(c) + ") FirstVal = " + str(sci1[r][c]) + " || SecondVal = " + str(sci2[r][c]) 
     print "\t New File/Add = " + str(new0.data[r][c]) 

모든 것이 인쇄 된 첫 번째 값, 즉 sci1[r][c]입니다. 이것은 변수가 전혀 수정되지 않는다는 것을 의미합니다. 수정하려면 어떻게해야합니까? 나는 FITS를 사용하는 데있어 매우 새로운 기술입니다. 여기에 무슨 짓을

답변

2

sci1new0에 할당는 sci1 변경을 의미 new0.data에 대한 참조를 만드는, 그래서 그것은 의도 된 변수를 수정되지만 인쇄 루프가 두 번 같은 개체를 인쇄한다. 대신 당신이 개체를 사용할 필요가 참조의 사본을 갖고 싶어이 경우 sci0 = new0.data.copy()

에서, 방법을 복사하는 경우 이 또한 pyfits하는 NumPy와 그 이미지를 표현하기 위해 사용하는 사용하는 가정되는 방법이 아니다. 루프 대신 전체 배열에 연산을 적용합니다. 대부분의 경우 읽기가 쉽고 훨씬 빠릅니다. 당신은 두 입력의 합에서 새로운 이미지를 만들려면

new0.data += new1.data 
print new0.data 

나 : 사실

sum_image = new0.data + new1.data 
# put it into an pyfits HDU (primary fits extension) 
hdu = pyfits.PrimaryHDU(data=sum_image) 
+0

을 PyFITS 그냥 NumPy와를 반환하면 두 NumPy와 배열의 올바른 위치로 표현 된 이미지에 맞는 추가하려면 배열 - 여기에는 특별한 것이 없습니다. 핵심은 Numpy를 올바르게 사용하는 방법을 이해하는 것입니다. – Iguananaut