scipy.spatial.
procrustes#
- scipy.spatial.procrustes(data1, data2)[源]#
Procrustes 分析,一种用于两个数据集的相似性检验。
每个输入矩阵是一组点或向量(矩阵的行)。空间的维度是每个矩阵的列数。给定两个大小相同的矩阵,procrustes 会对两者进行标准化,使得
\(tr(AA^{T}) = 1\).
两组点都以原点为中心。
Procrustes ([1], [2]) 随后将最佳变换(包括缩放/膨胀、旋转和反射)应用于第二个矩阵,以最小化 \(M^{2}=\sum(data1-data2)^{2}\),或最小化两个输入数据集之间逐点差异的平方和。
此函数并非设计用于处理具有不同数据点数量(行)的数据集。如果两个数据集具有不同的维度(列数不同),只需在较小的数据集上添加零列即可。
- 参数:
- data1array_like
矩阵,n 行表示 k(列)空间中的点。data1 是参考数据,标准化后,data2 中的数据将被转换以符合 data1 中的模式(必须有 >1 个唯一点)。
- data2array_like
k 空间中要拟合到 data1 的 n 行数据。必须与 data1 具有相同的形状
(numrows, numcols)
(必须有 >1 个唯一点)。
- 返回:
- mtx1array_like
data1 的标准化版本。
- mtx2array_like
data2 最适合 data1 的方向。已居中,但不一定满足 \(tr(AA^{T}) = 1\)。
- disparityfloat
如上定义的 \(M^{2}\)。
- 引发:
- ValueError
如果输入数组不是二维的。如果输入数组的形状不同。如果输入数组有零列或零行。
另请参阅
备注
差异不应取决于输入矩阵的顺序,但输出矩阵会,因为只有第一个输出矩阵保证被缩放以满足 \(tr(AA^{T}) = 1\)。
重复的数据点通常是可以的,复制一个数据点会增加其对 procrustes 拟合的影响。
差异会随每个输入矩阵中的点数而缩放。
参考文献
示例
>>> import numpy as np >>> from scipy.spatial import procrustes
这里的矩阵
b
是a
的旋转、平移、缩放和镜像版本>>> 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) 0