1

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

有谁知道好的解决方案?

4

2 回答 2

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.

我希望现在的路很清楚。当然,您必须检查零(可能还需要换行)以避免除以它们,但这是应用高斯的正常方式。

于 2013-05-30T08:29:21.903 回答
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))

会做你的工作。

于 2013-05-30T09:52:56.313 回答