pypose.Sim3 = functools.partial(<class 'pypose.lietensor.lietensor.LieTensor'>, ltype=<pypose.lietensor.lietensor.Sim3Type object>)

Alias of Sim3 type LieTensor.


data (Tensor, or list, or ‘int…’) –

A Tensor object, or constructing a Tensor object from list, which defines tensor data (see below), or from ‘int…’, which defines tensor shape.

The shape of Tensor object must be (*, 8), where * is empty, one, or more batched dimensions (the lshape of this LieTensor), otherwise error will be raised.

Internally, Sim3 LieTensors are stored by concatenating the translation vector with an RxSO3:

\[\mathrm{data}[*, :] = [t_x, t_y, t_z, q_x, q_y, q_z, q_w, s], \]

where \(\begin{pmatrix} t_x & t_y & t_z \end{pmatrix}^T \in \mathbb{R}^3\) is the translation vector and \(\begin{pmatrix} q_x & q_y & q_z & q_w \end{pmatrix}^T\) and \(s \in \mathbb{R}\) are the unit quaternion and the scaling factor as in pp.RxSO3, respectively.


>>> pp.Sim3(torch.randn(2, 8))
Sim3Type LieTensor:
tensor([[ 0.0175,  0.8657, -0.2274,  2.2380, -0.0297, -0.3799, -0.0664,  0.9995],
        [ 0.8744,  0.4114,  1.2041, -0.5687, -0.5630,  0.6025, -0.6137,  1.1185]])
>>> pp.Sim3([0, 0, 0, 0, 0, 0, 1, 1])
Sim3Type LieTensor:
tensor([0., 0., 0., 0., 0., 0., 1., 1.])

If data is tensor-like, the last dimension should correspond to the 8 elements of the above embedding.


It is not advised to construct Sim3 Tensors by specifying storage sizes with ‘int…’, which does not initialize data.

Consider using pypose.randn_Sim3 or pypose.identity_Sim3 instead.

See pypose.Log, pypose.Inv, pypose.Act, pypose.Retr, pypose.Adj, pypose.AdjT, pypose.Jinvp for implementations of relevant operations.


Access documentation for PyPose

View Docs


Get started with tutorials and examples

View Tutorials

Get Started

Find resources and how to start using pypose

View Resources