集成在大型掩码数组上

时间:2016-02-19 13:57:16

标签: python arrays numpy scipy interpolation

我试图在简单的1d插值上插入大量的y值,然后对结果进行积分。

以下是目前的代码:

wavelengths是一个形状[nredshifts,nwavelengths]

的数组

fluxes是一个形状[nmodels,nwavelengths]

的数组
from scipy.integrate import simps

transmission = scipy_interpolant(wavelengths)[..., np.newaxis]  # from a previously defined scipy.interpolate.interp1d class
propagated = transmission * fluxes.T
wavelengths = wavelengths[..., np.newaxis]
wavelengths = np.repeat(wavelengths, mult.shape[-1], axis=-1)
top = simps(propagated, wavelengths, axis=1)
bottom = simps(transmission, wavelengths, axis=1)

result = top / bottom  # shape of [nredshifts, nwavelengths]

此代码目前有效。然而,存在一个缺陷:整合产生额外的金额。如果我解释使用这些图片会更好:

正常整合将找到此曲线下的区域: Integration as normal will find the area under this curve

但我需要它来找到这条曲线下的区域: enter image description here

所以我在3d数组上遇到这个1d问题(整合axis=1),并不是所有的x(波长)值都是一样的!

我可以非常轻松地使用1d数组:只需删除有问题的部分:例如x[(x > 3) & (x < 7)]。但是,我不能用三维数组做这个,因为它们的波长都是不同的。我尝试将违规条目设置为0np.nan,然后simps只返回nan s。我已经尝试过使用蒙面数组,希望scipy很聪明,知道我想要什么,但似乎忽略了这些面具!

有什么想法吗?

由于

0 个答案:

没有答案