如何将矩阵变换成包含单位矩阵的矩阵



我想使用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中没有变换函数。

谁知道好的解决方案?

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

不检查零的示例步骤(即当所有值都≠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.
我希望现在这条路是畅通的。当然,您必须检查是否为零(并且可能交换行)以避免被它们除除,但这是应用高斯的正常方式。

允许行,然后

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))

可以代替你的工作

相关内容