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