我有一个模型光谱网格,它具有恒定的,非常高的光谱分辨率,我需要将它们下采样到较低的分辨率,同时保留计数的总数 .
本质上,如果前5个箱子有(标称箱中心)波长 [7.8, 7.81, 7.82, 7.83, 7.84]
,并且值 [1.01, 1.02, 1.015, 1.014, 1.02]
,我想要的箱子是某个(非整数)因子(比如2.5倍)宽,我想要我的新频谱具有标称波长 [7.81, 7.83]
和值 [1.01+1.02+0.5*1.015, 0.5*1.015+1.014+1.02]
(一般情况下,箱子也没有排列,所以你可以在两侧获得一小部分箱子) .
我将调用我的网格 spec_ssp
,它的 shape
为 (93, 16, 39848)
. 波长沿轴2变化,前两个轴是其他参数 . 我还有每个波长区的标称(中心)波长(技术上,它们是're the log of the wavelength, but that shouldn't),称为 logL_ssp
,以及logL网格所需的新间距 dlogL_new
. 我可以通过计算 np.median(logL_ssp[1:] - logL_ssp[:-1])
找出我的模板 dlogL_ssp
的名义logL间距,并且它's about 20% the desired logL spacing. We' ll调用该分数 f
.
我最初尝试使用 scipy.ndimage.zoom
,使用前面提到的因子 f
,但发现它给了我一个被 exactly 4 因子下采样的数组 . 我需要一个精确的重新采样,所以这不起作用 .
接下来,我尝试在设置新的bin限制之后使用 np.interp1d
沿轴2线性插值,目的是使用 np.integrate.quad
在连续的bin限制之间将光谱集成到我的网格中,有效地估算每个新bin中的总光量 . ,或多或少严格 . 但是, quad
与 interp1d
的插值器不能很好地匹配( quad
不能为每个模型频谱制作一个新的插值器) .
任何想法如何解决这个问题?