scipy.linalg.polar¶
- scipy.linalg.polar(a, side='right')[源代码]¶
计算极分解。
返回极分解的因子 [1] u‘和 `p 这样一来,
a = up
(如果 side 是否“正确”)或a = pu
(如果 side 是“左”),其中 p 是半正定的。根据形状的不同 a 的行或列 u 都是正交的。什么时候 a 是一个正方形阵列, u 是一个正方形酉阵。什么时候 a 不是正方的,“正则极分解” [2] 是经过计算的。- 参数
- a(m,n)类数组
要分解的数组。
- side{‘左’,‘右’},可选
确定是计算右极分解还是计算左极分解。如果 side 是“对的”,那么
a = up
。如果 side 是“左”,那么a = pu
。默认值为“Right”。
- 退货
- u(M,n)ndarray
如果 a 是正方形的,那么 u 是一元性的。如果m>n,则 a 是正交的,如果m<n,则 u 都是正交的。
- pndarray
p 是厄米特半正定的吗?如果 a 不是单数的, p 是肯定的。的形状 p 是(n,n)还是(m,m),取决于 side 分别是“右”或“左”。
参考文献
示例
>>> from scipy.linalg import polar >>> a = np.array([[1, -1], [2, 4]]) >>> u, p = polar(a) >>> u array([[ 0.85749293, -0.51449576], [ 0.51449576, 0.85749293]]) >>> p array([[ 1.88648444, 1.2004901 ], [ 1.2004901 , 3.94446746]])
非方示例,其中m<n:
>>> b = np.array([[0.5, 1, 2], [1.5, 3, 4]]) >>> u, p = polar(b) >>> u array([[-0.21196618, -0.42393237, 0.88054056], [ 0.39378971, 0.78757942, 0.4739708 ]]) >>> p array([[ 0.48470147, 0.96940295, 1.15122648], [ 0.96940295, 1.9388059 , 2.30245295], [ 1.15122648, 2.30245295, 3.65696431]]) >>> u.dot(p) # Verify the decomposition. array([[ 0.5, 1. , 2. ], [ 1.5, 3. , 4. ]]) >>> u.dot(u.T) # The rows of u are orthonormal. array([[ 1.00000000e+00, -2.07353665e-17], [ -2.07353665e-17, 1.00000000e+00]])
另一个非平方示例,其中m>n:
>>> c = b.T >>> u, p = polar(c) >>> u array([[-0.21196618, 0.39378971], [-0.42393237, 0.78757942], [ 0.88054056, 0.4739708 ]]) >>> p array([[ 1.23116567, 1.93241587], [ 1.93241587, 4.84930602]]) >>> u.dot(p) # Verify the decomposition. array([[ 0.5, 1.5], [ 1. , 3. ], [ 2. , 4. ]]) >>> u.T.dot(u) # The columns of u are orthonormal. array([[ 1.00000000e+00, -1.26363763e-16], [ -1.26363763e-16, 1.00000000e+00]])