You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用np.meshgrid生成DataFrame后,子集筛选末尾经度值失败排查

问题原因及解决办法

这是浮点数精度误差导致的问题。

具体原因

np.arange是通过起始值不断累加步长1e-4来生成序列的,但浮点数在二进制存储中无法精确表示所有十进制小数,累加过程中会产生微小的精度偏差。你以为的末尾经度值89.7788,实际上生成的最后一个经度值并不是这个精确数,而是一个非常接近它的近似值(比如89.77879999999999这类)。直接用==做精确匹配自然找不到结果。

你可以打印a[-5:]查看实际生成的末尾几个值,就能直观看到这种偏差:

print(a[-5:])

解决办法

有几种常用的处理方式:

  • 用np.isclose做近似匹配,允许一定的误差范围:
    len(np_df[np.isclose(np_df['lon'], 89.7788, atol=1e-8)])
    
  • 对经度值进行四舍五入,保留固定小数位数后再匹配:
    len(np_df[np.round(np_df['lon'], 4) == 89.7788])
    
  • 改用np.linspace生成序列,它会直接计算起始和结束值之间的等分点,避免累加误差:
    # 计算步数:(89.7788 - 89.7664)/1e-4 = 124,所以生成125个点(包含首尾)
    a = np.linspace(89.7664, 89.7788, num=125)
    b = np.linspace(20.6897, 20.7049, num=153)
    

内容的提问来源于stack exchange,提问作者d_frEak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 04:26:55