Как обновить массив данных FITS с помощью PyFITS?

Я пытаюсь создать новый файл FITS из двух старых, используя PyFITS.

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.


person Adam Smith    schedule 19.03.2014    source источник


Ответы (1)


Здесь вы сделали sci1 ссылкой на new0.data, что означает, что присвоение new0 также изменяет sci1, поэтому оно изменяет предполагаемую переменную, но ваш цикл печати печатает один и тот же объект дважды. Если вы хотите иметь копию вместо ссылки, вы должны использовать метод копирования объектов, в этом случае sci0 = new0.data.copy()

Это также не тот способ, которым вы должны использовать numpy, который pyfits использует для представления своих изображений. Вместо циклов вы применяете операции к полным массивам, что в большинстве случаев проще для чтения и значительно быстрее. Если вы хотите добавить два подходящих изображения, представленных в виде массивов 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)
person jtaylor    schedule 20.03.2014
comment
Действительно, PyFITS просто возвращает массивы Numpy — здесь нет ничего особенного. Ключ в том, чтобы понять, как правильно использовать Numpy. - person Iguananaut; 21.03.2014