我需要得到一个(mxn) matrix_A从输入和:
- 找到它的m个线性无关的列,并将它们放入另一个矩阵x_b;
- 将matrix_A的剩余列放入matrix_N中;
- 我还需要知道我放在matrix_B和matrix_N中的那些列的索引,以便我可以稍后访问它们以更改列(索引可以在数组中,只要我可以使用它来查找原始matrix_A中的列)。
例子:
如果我有:
matriz_A = [[-3. 1. 4. 0. 0.],
[ 1. 0. -1. 1. 0.],
[ 1. 0. 1. 0. 1.]]
我需要matrix_B像:
matrix_B = [[1. 0. 0.],
[0. 1. 0.],
[0. 0. 1.]]
和matrix_N为
matrix_N = [[-3. 4.],
[ 1. -1.],
[ 1. 1.]]
我还需要知道matrix_B的索引是[1,3,4]而matrix_N的索引是[0,2]
如何在Python中实现?我使用numpy从输入中获取matrix_A作为浮点数矩阵。
我认为找到向量的最简单方法是使用sympy
。它允许找到第一个线性无关向量的索引。在您的例子中,第一个线性无关的是前3列。
import sympy
import numpy as np
matrix_a = np.array([[-3, 1, 4, 0, 0], [1, 0, -1, 1, 0], [1, 0, 1, 0, 1]])
echelon, index = sympy.Matrix(matrix_a).rref()
index
变量是线性无关列的元组。让我们检查index
是(0, 1, 2)
>>>index
(0, 1, 2)
最后,我们必须定义matrix_b
和matrix_n
:
matrix_b = matrix_a[:, index]
n_index = np.setxor1d(np.arange(matrix_a.shape[1]), index)
matrix_n = matrix_a[;, n_index]
最后验证一下:
>>>matrix_b
array([[-3, 1, 4],
[ 1, 0, -1],
[ 1, 0, 1]])
>>>matrix_n
array([[0, 0],
[1, 0],
[0, 1]])