当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy linalg.orthogonal_procrustes用法及代码示例


本文简要介绍 python 语言中 scipy.linalg.orthogonal_procrustes 的用法。

用法:

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

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

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

参数

A (M, N) 数组

要映射的矩阵。

B (M, N) 数组

目标矩阵。

check_finite 布尔型,可选

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

返回

R (N, N) 数组

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

scale 浮点数

A.T @ B 的奇异值之和。

抛出

ValueError

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

注意

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

参考

[1]

Peter H. Schonemann,“正交 Procrustes 问题的通用解决方案”,Psychometrica - Vol. 1。 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

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.linalg.orthogonal_procrustes。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。