为何Scipy的interp2d返回二维数组而非一维列表?
问题解析与解答
核心问题
使用scipy.interpolate.interp2d创建插值器后,调用interpolator([0.2, 0.4, 0.6], [0, 0, 0])时,得到3×3的全1数组而非预期的长度为3的一维列表,想知道结果中除第一行外的其他行代表什么。
原因解释
interp2d的调用逻辑是:传入的x和y参数会被当作两组网格点的坐标,最终返回所有x与y组合对应的插值结果。
具体到你的场景:
- 你传入的x是
[0.2, 0.4, 0.6](3个点),y是[0, 0, 0](3个点) - 插值器会生成这两组点的笛卡尔积,也就是计算每个x值与每个y值组合处的插值结果
- 因为所有y值都是0,每个x对应的插值结果都是1,最终就得到3行(对应3个y值)、3列(对应3个x值)的数组,每一行都是
[1,1,1]
官方示例取第一行的原因
官方示例中只取z[0, :],是因为示例里传入的y参数是单个值(比如y=0),此时返回的数组是1行n列,取第一行就是所有x对应的插值结果。而你传入了3个相同的y值,所以返回了3行重复的结果。
如何得到预期的一维列表
如果只需要y=0时的x插值结果,只需传入单个y值即可:
result = interpolator([0.2, 0.4, 0.6], 0) # 此时result是长度为3的一维数组,元素全为1
内容的提问来源于stack exchange,提问作者Axel
相关产品推荐
相关产品推荐

