Python中矩阵的线性无关列



我需要得到一个(mxn) matrix_A从输入和:

  1. 找到它的m个线性无关的列,并将它们放入另一个矩阵x_b;
  2. 将matrix_A的剩余列放入matrix_N中;
  3. 我还需要知道我放在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_bmatrix_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]])

相关内容

  • 没有找到相关文章

最新更新