# Source code for skspatial.transformation

```"""Spatial transformations."""
from typing import cast
from typing import Sequence

import numpy as np

from skspatial.typing import array_like

[docs]def transform_coordinates(points: array_like, point_origin: array_like, vectors_basis: Sequence) -> np.ndarray:
"""
Transform points into a new coordinate system.

Parameters
----------
points : (N, D) array_like
Array of N points with dimension D.
point_origin : (D,) array_like
Origin of the new coordinate system.
Array for one point with dimension D.
vectors_basis : sequence
Basis vectors of the new coordinate system.
Sequence of N_bases vectors.
Each vector is an array_like with D elements.

Returns
-------
ndarray
Coordinates in the new coordinate system.
(N, N_bases) array.

Examples
--------
>>> from skspatial.transformation import transform_coordinates

>>> points = [[1, 2], [3, 4], [5, 6]]
>>> vectors_basis = [[1, 0], [1, 1]]

>>> transform_coordinates(points, [0, 0], vectors_basis)
array([[ 1,  3],
[ 3,  7],
[ 5, 11]])

>>> points = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> vectors_basis = [[1, 0, 0], [-1, 1, 0]]

>>> transform_coordinates(points, [0, 0, 0], vectors_basis)
array([[1, 1],
[4, 1],
[7, 1]])

"""
vectors_to_points = np.subtract(points, point_origin)
array_transformed = np.matmul(vectors_to_points, np.transpose(vectors_basis))

return cast(np.ndarray, array_transformed)
```