UniformScale

class menpo.transform.UniformScale(scale, n_dims, skip_checks=False)[source]

Bases: DiscreteAffine, Similarity

An abstract similarity scale transform, with a single scale component applied to all dimensions. This is abstracted out to remove unnecessary code duplication.

Parameters:
  • scale ((n_dims,) ndarray) – A scale for each axis.
  • n_dims (int) – The number of dimensions
  • skip_checks (bool, optional) – If True avoid sanity checks on h_matrix for performance.
apply(x, batch_size=None, **kwargs)

Applies this transform to x.

If x is Transformable, x will be handed this transform object to transform itself non-destructively (a transformed copy of the object will be returned).

If not, x is assumed to be an ndarray. The transformation will be non-destructive, returning the transformed version.

Any kwargs will be passed to the specific transform _apply() method.

Parameters:
  • x (Transformable or (n_points, n_dims) ndarray) – The array or object to be transformed.
  • batch_size (int, optional) – If not None, this determines how many items from the numpy array will be passed through the transform at a time. This is useful for operations that require large intermediate matrices to be computed.
  • kwargs (dict) – Passed through to _apply().
Returns:

transformed (type(x)) – The transformed object or array

apply_inplace(x, **kwargs)

Applies this transform to a Transformable x destructively.

Any kwargs will be passed to the specific transform _apply() method.

Parameters:
  • x (Transformable) – The Transformable object to be transformed.
  • kwargs (dict) – Passed through to _apply().
Returns:

transformed (type(x)) – The transformed object

as_vector(**kwargs)

Returns a flattened representation of the object as a single vector.

Returns:vector ((N,) ndarray) – The core representation of the object, flattened into a single vector. Note that this is always a view back on to the original object, but is not writable.
compose_after(transform)

A Transform that represents this transform composed after the given transform:

c = a.compose_after(b)
c.apply(p) == a.apply(b.apply(p))

a and b are left unchanged.

This corresponds to the usual mathematical formalism for the compose operator, o.

An attempt is made to perform native composition, but will fall back to a TransformChain as a last resort. See composes_with for a description of how the mode of composition is decided.

Parameters:transform (Transform) – Transform to be applied before self
Returns:transform (Transform or TransformChain) – If the composition was native, a single new Transform will be returned. If not, a TransformChain is returned instead.
compose_after_inplace(transform)

Update self so that it represents this transform composed after the given transform:

a_orig = a.copy()
a.compose_after_inplace(b)
a.apply(p) == a_orig.apply(b.apply(p))

a is permanently altered to be the result of the composition. b is left unchanged.

Parameters:transform (composes_inplace_with) – Transform to be applied before self
Raises:ValueError – If transform isn’t an instance of composes_inplace_with
compose_before(transform)

A Transform that represents this transform composed before the given transform:

c = a.compose_before(b)
c.apply(p) == b.apply(a.apply(p))

a and b are left unchanged.

An attempt is made to perform native composition, but will fall back to a TransformChain as a last resort. See composes_with for a description of how the mode of composition is decided.

Parameters:transform (Transform) – Transform to be applied after self
Returns:transform (Transform or TransformChain) – If the composition was native, a single new Transform will be returned. If not, a TransformChain is returned instead.
compose_before_inplace(transform)

Update self so that it represents this transform composed before the given transform:

a_orig = a.copy()
a.compose_before_inplace(b)
a.apply(p) == b.apply(a_orig.apply(p))

a is permanently altered to be the result of the composition. b is left unchanged.

Parameters:transform (composes_inplace_with) – Transform to be applied after self
Raises:ValueError – If transform isn’t an instance of composes_inplace_with
copy()

Generate an efficient copy of this object.

Note that Numpy arrays and other Copyable objects on self will be deeply copied. Dictionaries and sets will be shallow copied, and everything else will be assigned (no copy will be made).

Classes that store state other than numpy arrays and immutable types should overwrite this method to ensure all state is copied.

Returns:type(self) – A copy of this object
decompose()

A DiscreteAffine is already maximally decomposed - return a copy of self in a list.

Returns:transform (DiscreteAffine) – Deep copy of self.
from_vector(vector)

Build a new instance of the object from its vectorized state.

self is used to fill out the missing state required to rebuild a full object from it’s standardized flattened state. This is the default implementation, which is a deepcopy of the object followed by a call to from_vector_inplace(). This method can be overridden for a performance benefit if desired.

Parameters:vector ((n_parameters,) ndarray) – Flattened representation of the object.
Returns:transform (Homogeneous) – An new instance of this class.
from_vector_inplace(p)[source]

Returns an instance of the transform from the given parameters, expected to be in Fortran ordering.

Parameters:p (float) – The parameter
has_nan_values()

Tests if the vectorized form of the object contains nan values or not. This is particularly useful for objects with unknown values that have been mapped to nan values.

Returns:has_nan_values (bool) – If the vectorized object contains nan values.
classmethod init_identity(n_dims)[source]

Creates an identity transform.

Parameters:n_dims (int) – The number of dimensions.
Returns:identity (UniformScale) – The identity matrix transform.
pseudoinverse()[source]

The inverse scale.

Type:UniformScale
pseudoinverse_vector(vector)

The vectorized pseudoinverse of a provided vector instance. Syntactic sugar for:

self.from_vector(vector).pseudoinverse().as_vector()

Can be much faster than the explict call as object creation can be entirely avoided in some cases.

Parameters:vector ((n_parameters,) ndarray) – A vectorized version of self
Returns:pseudoinverse_vector ((n_parameters,) ndarray) – The pseudoinverse of the vector provided
set_h_matrix(value, copy=True, skip_checks=False)

Updates h_matrix, optionally performing sanity checks.

Note that it won’t always be possible to manually specify the h_matrix through this method, specifically if changing the h_matrix could change the nature of the transform. See h_matrix_is_mutable for how you can discover if the h_matrix is allowed to be set for a given class.

Parameters:
  • value (ndarray) – The new homogeneous matrix to set.
  • copy (bool, optional) – If False, do not copy the h_matrix. Useful for performance.
  • skip_checks (bool, optional) – If True, skip checking. Useful for performance.
Raises:

NotImplementedError – If h_matrix_is_mutable returns False.

composes_inplace_with

UniformScale can swallow composition with any other UniformScale.

composes_with

Any Homogeneous can compose with any other Homogeneous.

h_matrix

The homogeneous matrix defining this transform.

Type:(n_dims + 1, n_dims + 1) ndarray
h_matrix_is_mutable

h_matrix is not mutable.

Type:False
has_true_inverse

The pseudoinverse is an exact inverse.

Type:True
linear_component

The linear component of this affine transform.

Type:(n_dims, n_dims) ndarray
n_dims

The dimensionality of the data the transform operates on.

Type:int
n_dims_output

The output of the data from the transform.

Type:int
n_parameters

The number of parameters: 1

Type:int
scale

The single scale value.

Type:float
translation_component

The translation component of this affine transform.

Type:(n_dims,) ndarray