首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用PyFITS更新FITS数据数组?

如何用PyFITS更新FITS数据数组?
EN

Stack Overflow用户
提问于 2014-03-19 15:21:49
回答 1查看 341关注 0票数 0

我正在尝试使用PyFITS从两个老版本创建一个新的FITS文件。

代码语言:javascript
复制
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很陌生。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-20 00:15:51

这里您所做的是使sci1成为对new0.data的引用,这意味着给new0的赋值也会改变sci1,因此它正在修改预期的变量,但是您的print循环打印了两次相同的对象。如果您想要一个副本而不是引用,您必须使用对象复制方法,在本例中是sci0 = new0.data.copy()

这也不是你应该使用numpy的方式,而numpy是pyfits用来表示其图像的。而不是循环,而是将操作应用于完整数组,这在大多数情况下更容易阅读,而且速度更快。如果要在内部添加两个fits图像,表示为numpy数组:

代码语言:javascript
复制
new0.data += new1.data
print new0.data

或者,如果您想从两个输入的和中创建一个新的映像:

代码语言:javascript
复制
sum_image = new0.data + new1.data
# put it into an pyfits HDU (primary fits extension)
hdu = pyfits.PrimaryHDU(data=sum_image)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22510452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档