我有一个模型光谱网格,它具有恒定的,非常高的光谱分辨率,我需要将它们下采样到较低的分辨率,同时保留计数的总数 .

本质上,如果前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中的总光量 . ,或多或少严格 . 但是, quadinterp1d 的插值器不能很好地匹配( quad 不能为每个模型频谱制作一个新的插值器) .

任何想法如何解决这个问题?