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

运行Cartopy示例触发ValueError零尺寸数组报错问题排查问询

问题根因

该报错是Cartopy 0.20.2与Numpy ≥1.22的已知版本兼容问题,无需提交新Issue,官方已在后续版本中修复,可直接通过本地调整解决。
触发逻辑:Cartopy在处理投影边界路径转换时,部分裁剪步骤会返回空顶点数组,旧版代码未做空数组校验,直接调用Numpy的min()/max()规约方法;Numpy从1.22版本开始,空数组上的规约操作不再返回隐式默认值,直接抛出你看到的ValueError: zero-size array to reduction operation minimum which has no identity错误。

本地修复方案

按优先级从高到低可选以下方案:

  • 方案1:升级Cartopy到0.21.0及以上版本
    0.20.2之后的正式版已经合入了该空数组校验的修复代码,直接执行升级即可:
    pip install "cartopy>=0.21.0" -U
    
    如果是conda环境优先用conda源安装,可避免GEOS、PROJ等底层地理依赖的编译问题。
  • 方案2:降级Numpy到1.21.x兼容版本
    如果暂时不能升级Cartopy,可将Numpy降级到不存在该兼容问题的最后一个稳定版本:
    pip install numpy==1.21.6 -U
    
    降级后无需修改其他依赖,重新运行测试代码即可正常加载海岸线图层出图。
  • 方案3:临时热修复(不想变更现有依赖版本)
    打开报错日志中提到的Cartopy安装路径下的crs.py文件,你的环境对应路径为/home/ulrich/miniconda3/lib/python3.8/site-packages/cartopy/crs.py,定位到1247行附近的边界判断逻辑,原代码为:
    if (x.min() >= x_limits[0] and x.max() <= x_limits[1] and
        y.min() >= y_limits[0] and y.max() <= y_limits[1]):
        return vertices
    
    在判断条件最前端加空数组长度校验,修改为:
    if len(x) > 0 and len(y) > 0 and (x.min() >= x_limits[0] and x.max() <= x_limits[1] and
        y.min() >= y_limits[0] and y.max() <= y_limits[1]):
        return vertices
    
    保存文件后重新运行脚本即可绕过该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 15:54:06