0

から提供された緯度に基づいて、fits 配列をスプライスしようとしていHeaderます。ただし、Python の知識と のドキュメントでは、そうすることができないようですastropy。私が持っているコードは次のようなものです:

from astropy.io import fits
import numpy as np

Wise1 = fits.open('Image1.fits')
im1 = Wise1[0].data

im1 = np.where(im1 > *latitude1, 0, im1)

newhdu = fits.PrimaryHDU(im1)
newhdulist = fits.HDUList([newhdu])
newhdulist.writeto('1b1_Bg_Removed_2.fits')

latitude1これは度単位の値で、ヘッダーから呼び出された後に認識されます。だから私が達成する必要がある2つのことがあります:

  1. 銀河緯度を認識するためにヘッダーを呼び出す方法は?
  2. 緯度の範囲の値のみが含まれ、それ以外はすべて 0 になるように、配列をつなぎ合わせます。
4

1 に答える 1

3

あなたが示した例に基づいて、「スプライス」とは「切り取る」または「切り取る」ことを意味すると思います。

astropy.nddataワールド座標系に基づく (つまり、緯度/経度または緯度/経度) カットアウトのルーチンがあります。

ただし、扱っている単純なケースでは、各ピクセルの座標が必要なだけです。これを行うには、WCS を作成します。

from astropy import wcs
w = wcs.WCS(Wise1[0].header)
xx,yy = np.indices(im.shape)
lon,lat = w.wcs_pix2world(xx,yy,0)

newim = im[lat > my_lowest_latitude]

ただし、ヘッダー情報を保持したい場合は、手動で管理する必要がないため、カットアウト ツールを使用する方がはるかに優れています。

from astropy.nddata import Cutout2D
from astropy import coordinates
from astropy import units as u

# example coordinate - you'll have to figure one out that's in your map
center = coordinates.SkyCoord(mylon*u.deg, mylat*u.deg, frame='fk5')

# then make an array cutout
co = nddata.Cutout2D(im, center, size=[0.1,0.2]*u.arcmin, wcs=w)

# create a new FITS HDU
hdu = fits.PrimaryHDU(data=co.data, header=co.wcs.to_header())

# write to disk
hdu.writeto('cropped_file.fits')

ユース ケースの例は、astropy のドキュメントにあります。

于 2015-11-04T07:17:22.410 に答える