如何用PyFITS更新FITS数据数组?

时间:2014-03-19 15:21:49

标签: python numpy fits pyfits

我正在尝试使用PyFITS从两个较旧的FITS文件中创建一个新的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。

1 个答案:

答案 0 :(得分:2)

您在此处所做的是让sci1引用new0.data,这意味着对new0的分配也会更改sci1,因此它正在修改预期的变量,但是print循环打印两次相同的对象。 如果您想要复制而不是引用,则必须使用对象复制方法,在本例中为sci0 = new0.data.copy()

这也不是你应该使用pyump用于表示其图像的numpy的方式。您可以将操作应用于完整数组,而不是循环,这在大多数情况下更容易阅读并且速度更快。如果你想添加两个适合图像表示为numpy数组inplace:

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)