我试图在简单的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]
此代码目前有效。然而,存在一个缺陷:整合产生额外的金额。如果我解释使用这些图片会更好:
所以我在3d数组上遇到这个1d问题(整合axis=1
),并不是所有的x(波长)值都是一样的!
我可以非常轻松地使用1d数组:只需删除有问题的部分:例如x[(x > 3) & (x < 7)]
。但是,我不能用三维数组做这个,因为它们的波长都是不同的。我尝试将违规条目设置为0
或np.nan
,然后simps
只返回nan
s。我已经尝试过使用蒙面数组,希望scipy很聪明,知道我想要什么,但似乎忽略了这些面具!
有什么想法吗?
由于