np.interp返回常量数组异常,求问题排查方案
问题根源
np.interp函数要求第二个参数xp必须是单调递增的数组,否则插值结果会不符合预期(甚至返回常量)。你的代码中:
r0是从2到215的递增数组- 计算得到的
f是单调递减的数组(因为r0越大,f表达式里各项的分母越大,整体值越小)
当xp(也就是f)递减时,np.interp的内部搜索逻辑会失效,最终返回错误的常量结果。
解决方法
因为f和r0是严格单调的(f递减、r0递增),只需将f和r0同时反转,让f变成递增数组,就能满足np.interp的参数要求:
r0 = np.linspace(2, 215, 1000) f = 8.9*np.sqrt(4.8e9/(r0**14) + 3e8/(r0**6) + 1.4e6/(r0**2.3)) ds = np.array([3950, 1837, 1347, 900]) # 反转f和r0,使xp变为递增 result = np.interp(ds, f[::-1], r0[::-1]) print(result)
逻辑验证
- 反转后的
f[::-1]是从最小值到最大值的递增数组 - 对应的
r0[::-1]是从215到2的递减数组 - 此时np.interp可以正确匹配
ds中每个值在f[::-1]中的位置,插值得到对应的r0值
内容的提问来源于stack exchange,提问作者Francesco Azzollini
相关产品推荐
相关产品推荐

