【问题标题】:Trouble creating 3D rotation matrix in Pytorch - ValueError: only one element tensors can be converted to Python scalars在 Pytorch 中创建 3D 旋转矩阵时遇到问题 - ValueError:只有一个元素张量可以转换为 Python 标量
【发布时间】:2019-11-25 18:36:00
【问题描述】:

我正在尝试在 pytorch 中创建 3D 旋转矩阵,如 pdf 的第一页所示,但我遇到了一些问题。到目前为止,这是我的代码:

zero = torch.from_numpy(np.zeros(len(cos)))
one = torch.from_numpy(np.ones(len(cos)))
R_transpose = torch.tensor([cos, -sin, zero, sin, cos, zero, zero, zero, one]).reshape(-1, 3, 3)

cos 和 sin 是如下所示的矩阵:

tensor([[[1.]],

    [[1.]],

    [[1.]],

    [[1.]],

    [[1.]]], dtype=torch.float64)

我的目标是创建 x 个旋转矩阵(例如,四个具有上述 cos 值的矩阵)。

我目前的代码导致“ValueError:只有一个元素张量可以转换为 Python 标量”

我应该如何更改我的代码以实现我的目标?

【问题讨论】:

  • 您希望我们猜测是哪一行产生了错误吗?

标签: python-3.x numpy pytorch


【解决方案1】:

为什么不用赋值来创建R_transpose

# define rotation angels (radians) using numpy
th_np = np.array([np.pi*0.25, np.pi/6, np.pi*0.5, np.pi/3.], dtype=np.float32)
# conver to pytorch
th_t = torch.from_numpy(th_np)
# init to zeros
R_transpose = torch.zeros(th_t.numel(), 3, 3, dtype=torch.float)
# assign the values:
R_transpose[:, 2, 2] = 1.
R_transpose[:, [0,1],[0,1]] = th_t[:, None].cos()
R_transpose[:, 0, 1] = -th_t.sin()
R_transpose[:, 1, 0] = th_t.sin()

结果是

tensor([[[ 7.0711e-01, -7.0711e-01,  0.0000e+00],
     [ 7.0711e-01,  7.0711e-01,  0.0000e+00],
     [ 0.0000e+00,  0.0000e+00,  1.0000e+00]],

    [[ 8.6603e-01, -5.0000e-01,  0.0000e+00],
     [ 5.0000e-01,  8.6603e-01,  0.0000e+00],
     [ 0.0000e+00,  0.0000e+00,  1.0000e+00]],

    [[-4.3711e-08, -1.0000e+00,  0.0000e+00],
     [ 1.0000e+00, -4.3711e-08,  0.0000e+00],
     [ 0.0000e+00,  0.0000e+00,  1.0000e+00]],

    [[ 5.0000e-01, -8.6603e-01,  0.0000e+00],
     [ 8.6603e-01,  5.0000e-01,  0.0000e+00],
     [ 0.0000e+00,  0.0000e+00,  1.0000e+00]]])

请注意,我们一次分配了所有天使,因此此解决方案适用于您可能拥有的任意数量的角度。

【讨论】:

    猜你喜欢
    • 2020-11-08
    • 2021-03-16
    • 2022-01-12
    • 2019-02-04
    • 1970-01-01
    • 2021-07-23
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多