scipy.linalg.
orthogonal_procrustes#
- scipy.linalg.orthogonal_procrustes(A, B, check_finite=True)[源代码][源代码]#
计算正交普鲁克问题(orthogonal Procrustes problem)的矩阵解。
给定形状相同的矩阵 A 和 B,使用 [1] 中给出的算法,找到一个最接近将 A 映射到 B 的正交矩阵 R。
- 参数:
- 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
。- 比例浮动
A.T @ B
的奇异值之和。
- Raises:
- ValueError
如果输入数组的形状不匹配,或者如果 check_finite 为 True 并且数组包含 Inf 或 NaN。
注释
请注意,与对空间数据进行的高级普罗克鲁斯特分析不同,此函数仅使用旋转和反射等正交变换,不使用缩放或平移。
Added in version 0.15.0.
参考文献
[1]Peter H. Schonemann, “正交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