Skip to main content
`Ctrl`+`K`
scipy.spatial.transform.Rotation.

# concatenate

static Rotation.concatenate(rotations)

  Concatenate a sequence of `Rotation` objects into a single object.

  This is useful if you want to, for example, take the mean of a set of rotations and need to pack them into a single object to do so.

  Parameters:
    rotations sequence of `Rotation` objects

      The rotations to concatenate. If a single `Rotation` object is passed in, a copy is returned.

  Returns:
    concatenated `Rotation` instance

      The concatenated rotations.

  Notes

  Added in version 1.8.0.

  Array API Standard Support

  `concatenate` has experimental support for Python Array API Standard compatible backends in addition to NumPy. Please consider testing these features by setting an environment variable `SCIPY_ARRAY_API=1` and providing CuPy, PyTorch, JAX, or Dask arrays as array arguments. The following combinations of backend and device (or other capability) are supported.

  Library | CPU | GPU
  --- | --- | ---
  NumPy | ✅ | n/a
  CuPy | n/a | ✅
  PyTorch | ✅ | ✅
  JAX | ✅ | ✅
  Dask | ⛔ | n/a

  > See Support for the array API standard for more information.

  Examples

      >>> from scipy.spatial.transform import Rotation as R
      >>> r1 = R.from_rotvec([0, 0, 1])
      >>> r2 = R.from_rotvec([0, 0, 2])
      >>> rc = R.concatenate([r1, r2])
      >>> rc.as_rotvec()
      array([[0., 0., 1.],
             [0., 0., 2.]])
      >>> rc.mean().as_rotvec()
      array([0., 0., 1.5])

  Concatenation of a split rotation recovers the original object.

      >>> rs = [r for r in rc]
      >>> R.concatenate(rs).as_rotvec()
      array([[0., 0., 1.],
             [0., 0., 2.]])

  Note that it may be simpler to create the desired rotations by passing in a single list of the data during initialization, rather then by concatenating:

      >>> R.from_rotvec([[0, 0, 1], [0, 0, 2]]).as_rotvec()
      array([[0., 0., 1.],
             [0., 0., 2.]])