我正在尝试使用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很陌生。
发布于 2014-03-20 00:15:51
这里您所做的是使sci1成为对new0.data的引用,这意味着给new0的赋值也会改变sci1,因此它正在修改预期的变量,但是您的print循环打印了两次相同的对象。如果您想要一个副本而不是引用,您必须使用对象复制方法,在本例中是sci0 = new0.data.copy()。
这也不是你应该使用numpy的方式,而numpy是pyfits用来表示其图像的。而不是循环,而是将操作应用于完整数组,这在大多数情况下更容易阅读,而且速度更快。如果要在内部添加两个fits图像,表示为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)https://stackoverflow.com/questions/22510452
复制相似问题