0

PyFITS を使用して、2 つの古い 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の使用に非常に慣れていません。

4

1 に答える 1

2

ここで行ったことは、への割り当ても変更されることを意味sci1する参照を作成することです。したがって、意図した変数を変更していますが、印刷ループは同じオブジェクトを 2 回印刷しています。参照の代わりにコピーが必要な場合は、オブジェクトのコピー メソッドを使用する必要があります。new0.datanew0sci1sci0 = new0.data.copy()

これは、pyfits が画像を表すために使用する numpy の使用方法でもありません。ループの代わりに、完全な配列に操作を適用すると、ほとんどの場合、読みやすく、大幅に高速になります。numpy 配列として表される 2 つの適合画像をインプレースに追加する場合:

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 に答える