0

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

4

1 回答 1

2

您在这里所做sci1的是引用,new0.data这意味着对的赋值new0也会更改sci1,因此它正在修改预期的变量,但您的打印循环正在两次打印同一个对象。如果你想有一个副本而不是引用,你必须使用对象复制方法,在这种情况下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)
于 2014-03-20T00:15:51.183 回答