scipy.linalg.orthogonal_procrustes

scipy.linalg.orthogonal_procrustes(A, B, check_finite=True)[源代码]

计算正交Procrstes问题的矩阵解。

在给定相同形状的矩阵A和B的情况下,使用中给出的算法找出最接近地将A映射到B的正交矩阵R [1].

参数
A(M,N)类数组

要映射的矩阵。

B(M,N)类数组

目标矩阵。

check_finite布尔值,可选

是否检查输入矩阵是否仅包含有限个数字。禁用可能会带来性能提升,但如果输入确实包含无穷大或NAN,则可能会导致问题(崩溃、非终止)。

退货
R(N,N)ndarray

正交Procrstes问题的矩阵解的Frobenius范数最小化 (A @ R) - B ,在符合以下条件的情况下 R.T @ R = I

scale浮动

的奇异值之和 A.T @ B

加薪
ValueError

如果输入数组形状不匹配,或者Check_Finite为True,并且数组包含inf或NaN。

注意事项

请注意,与空间数据的高级Procrstes分析不同,此函数仅使用旋转和反射等正交变换,并且不使用缩放或平移。

0.15.0 新版功能.

参考文献

1

Peter H.Schonemann,“正交Procrstes问题的广义解”,“心理计量学”--第31卷,第1期,1996年3月。

示例

>>> from scipy.linalg import orthogonal_procrustes
>>> A = np.array([[ 2,  0,  1], [-2,  0,  0]])

反转列顺序并检查反对角线映射

>>> R, sca = orthogonal_procrustes(A, np.fliplr(A))
>>> R
array([[-5.34384992e-17,  0.00000000e+00,  1.00000000e+00],
       [ 0.00000000e+00,  1.00000000e+00,  0.00000000e+00],
       [ 1.00000000e+00,  0.00000000e+00, -7.85941422e-17]])
>>> sca
9.0