用非整数因子重新组合numpy数组

时间:2015-09-22 23:12:11

标签: python numpy integration interpolation resampling

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

本质上,如果前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变化,前两个轴是其他参数。我也有每个波长区的标称(中心)波长(技术上,它们是波长的对数,但这无关紧要),称为logL_ssp,以及logL网格所需的新间距, dlogL_new。我可以通过计算dlogL_ssp来计算模板np.median(logL_ssp[1:] - logL_ssp[:-1])的标称logL间距,它大约是所需logL间距的20%。我们将该分数称为f

我最初尝试使用scipy.ndimage.zoom,使用前面提到的因素f,但发现它给了我一个按正好4 因子进行下采样的数组。我需要一个精确的重新采样,所以这不起作用。

接下来,我尝试在设置新的bin限制之后使用np.interp1d沿轴2进行线性插值,目的是使用np.integrate.quad在连续的bin限制之间将光谱集成到我的网格中,从而有效地获得估计每个新垃圾桶的总光量,或多或少严格。但是,quadinterp1d的插值器不匹配(quad不喜欢非浮点输入)。而且,由于我有大约1500个模型光谱,所以在迭代所有三个轴时整个过程需要花费很长时间(是的,我只是为每个模型光谱制作一个新的插值器)。

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

0 个答案:

没有答案