scipy.linalg.

orthogonal_procrustes#

scipy.linalg.orthogonal_procrustes(A, B, check_finite=True)[source]#

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

给定形状相等的矩阵 A 和 B,找到一个正交矩阵 R 使得 A 与 B 的映射最接近,使用 [1] 中给出的算法。

参数:
A(M, N) array_like

待映射矩阵。

B(M, N) array_like

目标矩阵。

check_finitebool,可选

是否检查输入矩阵是否仅包含有限个数字。禁用后可能提高性能,但如果输入确实包含无穷大或 NaN,可能会导致出现问题(崩溃,无法终止)。

返回:
R(N, N) ndarray

正交 Procrustes 问题的矩阵解。最小化 (A @ R) - B 的 Frobenius 范数,条件是 R.T @ R = I

scalefloat

A.T @ B 的奇异值和。

引发:
ValueError

如果输入数组形状不匹配,或者当 check_finite 为 True,并且数组包含 Inf 或 NaN 时。

注释

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

添加到版本 0.15.0 中。

参考

[1]

彼得·H·舍内曼,“正交 Procrustes 问题的广义解”,Psychometrica – 第 31 卷,第 1 期,1966 年 3 月。 DOI:10.1007/BF02289451

示例

>>> import numpy as np
>>> 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