2014-03-19 15 views
0

我想用兩個較舊的使用PyFITS創建一個新的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.data參考,這意味着分配給new0也改變sci1,所以它正在修改預期變量,但您的打印循環打印同樣的對象兩次。 如果你想有一個副本,而不是必須使用的對象引用複製方法,在這種情況下sci0 = new0.data.copy()

這也不是你應該使用numpy的這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。 – Iguananaut