bundles / scipy 1.17.1 / scipy / spatial / _procrustes / procrustes
function
scipy.spatial._procrustes:procrustes
Signature
def procrustes ( data1 , data2 ) Summary
Procrustes analysis, a similarity test for two data sets.
Extended Summary
Each input matrix is a set of points or vectors (the rows of the matrix). The dimension of the space is the number of columns of each matrix. Given two identically sized matrices, procrustes standardizes both such that:
.
Both sets of points are centered around the origin.
Procrustes ([1], [2]) then applies the optimal transform to the second matrix (including scaling/dilation, rotations, and reflections) to minimize , or the sum of the squares of the pointwise differences between the two input datasets.
This function was not designed to handle datasets with different numbers of datapoints (rows). If two data sets have different dimensionality (different number of columns), simply add columns of zeros to the smaller of the two.
Parameters
data1: array_likeMatrix, n rows represent points in k (columns) space
data1is the reference data, after it is standardised, the data fromdata2will be transformed to fit the pattern indata1(must have >1 unique points).data2: array_liken rows of data in k space to be fit to
data1. Must be the same shape(numrows, numcols)as data1 (must have >1 unique points).
Returns
mtx1: array_likeA standardized version of
data1.mtx2: array_likeThe orientation of
data2that best fitsdata1. Centered, but not necessarily .disparity: floatas defined above.
Raises
: ValueErrorIf the input arrays are not two-dimensional. If the shape of the input arrays is different. If the input arrays have zero columns or zero rows.
Notes
The disparity should not depend on the order of the input matrices, but the output matrices will, as only the first output matrix is guaranteed to be scaled such that .
Duplicate data points are generally ok, duplicating a data point will increase its effect on the procrustes fit.
The disparity scales as the number of points per input matrix.
Examples
import numpy as np from scipy.spatial import procrustes✓
a = np.array([[1, 3], [1, 2], [1, 1], [2, 1]], 'd') b = np.array([[4, -2], [4, -4], [4, -6], [2, -6]], 'd') mtx1, mtx2, disparity = procrustes(a, b) round(disparity)✓
See also
- scipy.linalg.orthogonal_procrustes
- scipy.spatial.distance.directed_hausdorff
Another similarity test for two data sets
Aliases
-
scipy.spatial.procrustes