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

Numpy返回数组触发ragged nested sequences警告原因排查

警告触发原因

触发ragged nested sequence警告的核心原因是return语句中尝试拼接的三个子数组维度不统一,numpy无法将其转换为形状规则的数值型多维数组。
结合传入的测试参数逐行推导变量形状即可定位问题:

  • 输入arr形状为(3,4)(即示例中N=4),提取出的delta_right/delta_left/delta_back都是形状为(4,)的一维数组
  • 计算得到的delta_theta形状为(4,),沿axis=0累加得到的delta_theta_cumul形状保持(4,),外层套1次方括号[delta_theta_cumul]后,该子元素维度为(1,4)
  • 计算delta_x、delta_y时,给长度为4的一维运算结果额外套了一层np.array(),导致delta_x、delta_y初始形状就变成了(1,4)的二维数组,沿axis=0累加后的delta_x_cumul、delta_y_cumul形状仍为(1,4),再外层套1次方括号后,这两个子元素的维度变成了(1,1,4)

三个待拼接子元素的维度分别是(1,4)、(1,1,4)、(1,1,4),嵌套层级和各层长度都不统一,属于numpy定义的不规则嵌套序列,因此触发对应弃用警告。

修正方法

要得到形状为(3,N)的返回矩阵,只需要去掉计算和返回阶段多余的维度包裹即可,两种改法可选:

  1. 去掉delta_x、delta_y计算时多余的np.array()包裹,让三个累加结果都保持(N,)的一维形状,最后直接堆叠:
def get_wheel_status(arr, Dr, Dl, Db):
    
    delta_right = arr[0,:]
    delta_left  = arr[1,:]
    delta_back = arr[2,:]
    
    delta_theta = (delta_left - delta_right) / (Dr + Dl)
    delta_theta_cumul = np.cumsum(delta_theta, axis=0)
    
    # 去掉外层多余的np.array()包裹
    delta_x = 2*np.sin(delta_theta/2) * ((delta_back / delta_theta) + Db)
    delta_y = 2*np.sin(delta_theta/2) * ((delta_right / delta_theta) + Dr)

    delta_x_cumul = np.cumsum(delta_x, axis=0)
    delta_y_cumul = np.cumsum(delta_y, axis=0)
  
    # 三个一维数组直接堆叠,得到形状(3,N)的结果
    return np.array([delta_theta_cumul, delta_x_cumul, delta_y_cumul])
  1. 保留原有计算逻辑的话,用ravel()把二维的cumul结果拉平成一维,再用vstack按行堆叠,也能得到正确形状的结果:
return np.vstack([
    delta_theta_cumul,
    delta_x_cumul.ravel(),
    delta_y_cumul.ravel()
])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:48:09