Python 2D 数组——如何插入 x 并检索 y 值?

标签 python numpy astronomy spectrum pyfits

从昨天起我一直在寻找答案,但没有成功。所以我有一个一维光谱 (.fits) 文件,其中包含每个波长的通量值。我已将它们转换为二维数组 (x,y)=(波长, 通量),并希望编写一个程序,该程序将返回某些指定波长 (x) 处的通量 (y)。我已经尝试过:

#modules
import scipy
import numpy as np
import pyfits as pf

#Target Global Vaiables
hdulist_tg = pf.open('cutmask1-2.0001.fits')    
hdr_tg = hdulist_tg[0].header
flux_tg = hdulist_tg[0].data
crval_tg = hdr_tg['CRVAL1']             #Starting wavelength 
cdel_tg = hdr_tg['CDELT1']              #Wavelength axis width 
wave_tg = crval_tg + np.arange(3183)*cdel_tg        #Create an x-axis
wavelist = [6207,6315,6369,6438,6490,6565,6588]

wave_flux=[]
diff = 10
for wave in wave_tg:
    for flux in flux_tg:
        wave_flux.append((wave,flux))           

for item in wave_flux:
    wave = item[0]
    flux = item[1]

#Where I got my actual wavelength that exists in wave_tg
    diffmatch = np.abs(wave - wavelist[0])
    if diffmatch < diff:
        flux_wave = flux  
        diff = diffmatch 
        wavematch = wave

print wavelist[0],flux_wave,wavematch

但即使波长不同,程序也始终返回相同的通量值。请帮忙...

最佳答案

我会完全跳过二维表的创建,只使用 interp :

fluxvalues = np.interp(wavelist, wave_tg, flux_tg)

对于您发布的文件,由于 wave_tg 数组的硬编码长度,您发布的代码不起作用。因此,我建议您宁愿使用

wave_tg = crval_tg + np.arange(len(flux_tg))*cdel_tg

此外,由于某种原因,您发布的文件似乎实际上并未达到您正在查找的波长。您可能需要检查是否正确计算相应的波长或检查是否正在查找正确的波长。

关于Python 2D 数组——如何插入 x 并检索 y 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17419051/

相关文章:

python - 从 FITS 文件头创建 Ascii 表

python - pandas 更有效地从 csv 创建字典对象以作为 post 请求发送

android - 在真实的 Android 手机上运行 Python 应用程序

python - 为什么已经导入了整个包,还要在 Python 中导入特定的子包?

python - OpenCV VideoWriter:播放视频的问题

linux - 将 csh 中的 BUNIT 更改为 FITS 文件

python - 为什么函数总是返回相同的类型?

python - 将一维结构化数组转换为二维 numpy 数组

python - 为什么 SciPy 的 curve_fit 无法找到这个高阶高斯函数的协方差/给我有意义的参数?

python - 任何人都可以帮助修复 Google Colaboratory 上的这个常量 "ModuleNotFoundError"吗?