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

Python 如何使用PyFITS更新FITS数据数组?,python,numpy,fits,pyfits,Python,Numpy,Fits,Pyfits,我正在尝试使用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 = hdu

我正在尝试使用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非常陌生。

您在这里所做的是将
sci1
作为
new0的引用。data
意味着
new0
的赋值也会更改
sci1
,因此它会修改预期变量,但打印循环会打印同一对象两次。 如果您想要复制而不是引用,则必须使用objects copy方法,在这种情况下
sci0=new0.data.copy()

这也不是pyfits用来表示其图像的numpy的使用方式。您将操作应用于完整阵列,而不是循环,在大多数情况下,完整阵列更易于读取,而且速度更快。如果要添加以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)

实际上,PyFITS只返回Numpy数组——这里没有什么特别的。关键是要理解如何正确使用Numpy。