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

四元数转欧拉角代码报错:RuntimeError: shape '[4,3]'与输入大小3不兼容

问题分析与解决方案

报错根源

你遇到的RuntimeError是因为输入张量维度处理不当:
当输入的四元数是一维张量(形状为[4])时,代码错误地将quaternions.shape[0]的值(4)当作batch size,但实际这是单个四元数的元素数量,真实batch size应为1。此时Rotation.from_quat输出的欧拉角是一维数组[3],执行view(4,3)时,总元素数(3)与目标形状所需元素数(12)不匹配,导致报错。

修复后的代码

def compute_euler_angles_from_quaternion(quaternions, sequence='xyz'):
    # 统一输入为二维张量 [batch_size, 4],自动适配一维/二维输入
    quaternions = quaternions.view(-1, 4)
    batch_size = quaternions.shape[0]
    
    q = quaternions.detach().cpu().numpy()  
    rotations = Rotation.from_quat(q)
    euler_angles = rotations.as_euler(sequence, degrees=False)
    
    # 转换为torch张量并放回原设备
    euler_angles = torch.tensor(euler_angles, device=quaternions.device)
    # 确保输出形状为 [batch_size, 3](可选,因为as_euler已返回对应形状)
    euler_angles = euler_angles.view(batch_size, 3)

    return euler_angles

关键改动说明

  1. 统一输入维度:
    使用quaternions.view(-1,4)自动调整输入张量维度:
    • 若输入是一维张量[4],会转换为[1,4](batch size=1)
    • 若输入是二维张量[N,4],保持原形状不变(batch size=N)
  2. 避免错误的batch size计算:
    经过维度统一后,quaternions.shape[0]能正确获取真实的batch size,后续的view操作不会再出现元素数不匹配的问题。

测试验证

  • 输入单个四元数:torch.tensor([-0.07577483, 0.17546612, -0.10769336, 0.9756393]),输出形状为[1,3]
  • 输入批量四元数:torch.randn(4,4),输出形状为[4,3]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:26:11