如何将矩阵转换为包含单位矩阵的矩阵

时间:2013-05-30 07:43:07

标签: python numpy scipy linear-algebra

我想使用numpy / scipy从n * m数组中获取转换后的数组包含单位矩阵。

from n*m matrix
array([[ a,  b,  c,  d, e, f],
       [ g,  h,  i,  j, k, l],
       [ m,  n,  o,  p, q, r]])

to

array([[ 1,  0,  0,  a', b', c'],
       [ 0,  1,  0,  d', e', f'],
       [ 0,  0,  1,  g', h', i']])

数组前面有单位矩阵。我想要那些数组。

高斯约旦算法和高斯消元算法可以将矩阵转换为包含单位矩阵的矩阵。但这不能转换任何n * m矩阵,并且在numpy / scipy中没有转换函数。

任何人都知道好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

高斯算法仍然可以应用,因为它可以通过仅组合输入行来完成。然后,给定行末尾的附加值的数量无关紧要。

不检查零的示例步骤(即,如果所有值都是≠0,该怎么做):

a b c d e f
g h i j k l
m n o p q r

1 b/a    c/a    d/a    e/a    f/a     (that's I/a)
0 h-bg/a i-cg/a j-dg/a k-eg/a l-fg/a  (that's II - I*g/a))
0 n-bm/a o-cm/a p-dm/a q-em/a r-fm/a  (that's III - I*m/a)

etc.

我希望现在道路清晰。当然,你必须检查零(并且可能交换线)以避免除以它们,但这是应用高斯的正常方法。

答案 1 :(得分:0)

如果允许使用numpy.linalg,那么

import numpy as np
n, m = A.shape
assert n < m
B = np.linalg.solve(A[:, :n], A[:, n:])
C = np.hstack((np.identity(n), B))

将完成你的工作。