scipy.spatial.procrustes

scipy.spatial.procrustes(data1, data2)[源代码]

Procrstes分析,两个数据集的相似性检验。

每个输入矩阵是一组点或向量(矩阵的行)。空间的维度是每个矩阵的列数。在给定两个大小相同的矩阵的情况下,Procrstes对这两个矩阵进行标准化,从而:

  • \(tr(AA^{{T}}) = 1\)

  • 这两组点都围绕原点居中。

普罗克斯特(Prokulstes) ([1], [2]) 然后将最优变换应用于第二个矩阵(包括缩放/膨胀、旋转和反射)以最小化 \(M^{{2}}=\sum(data1-data2)^{{2}}\) ,或两个输入数据集之间逐点差的平方和。

此函数不是为处理具有不同数量的数据点(行)的数据集而设计的。如果两个数据集具有不同的维度(不同的列数),则只需在两个数据集中较小的一个上添加零列即可。

参数
data1array_like

矩阵,n行表示k(列)空间中的点 data1 是参考数据,标准化后,数据来自 data2 将被转换以适合该图案 data1 (必须有1个以上的唯一点)。

data2array_like

k个空间中的n行数据要适合 data1 。必须是相同的形状 (numrows, numcols) 作为数据1(必须有1个以上的唯一点)。

退货
mtx1array_like

标准化版本的 data1

mtx2array_like

的定位 data2 这最合适了。 data1 。居中,但不一定 \(tr(AA^{{T}}) = 1\)

disparity浮动

\(M^{{2}}\) 如上所述。

加薪
ValueError

如果输入数组不是二维的。如果输入数组的形状不同,则。如果输入数组有零列或零行。

参见

scipy.linalg.orthogonal_procrustes
scipy.spatial.distance.directed_hausdorff

两个数据集的另一种相似性检验

注意事项

  • 视差不应取决于输入矩阵的顺序,但输出矩阵将取决于,因为仅保证对第一输出矩阵进行缩放,使得 \(tr(AA^{{T}}) = 1\)

  • 复制数据点通常是可以的,复制数据点会增加其对Procrstes拟合的影响。

  • 视差以每个输入矩阵的点数为尺度。

参考文献

1

Krzanowski,W.J.(2000)。“多元分析原理”。

2

高尔,J.C.(1975)。“广义PROCRESTES分析”。

示例

>>> 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.0