Python 从秩亏矩阵中提取线性独立行的例程

Python 从秩亏矩阵中提取线性独立行的例程,python,matrix,Python,Matrix,我正在努力解决以下问题:我有一些非常大的矩阵(比如,至少2000x2000,将来可能会达到10000x1000),秩非常小(2或3,称为N),我需要找到一个有效的Python例程来从中提取线性独立的行(或列,矩阵是对称的!)。我试着取QR分解的Q矩阵的前N列,但它似乎不能正常工作(这可能是错误的吗?) 下面是我用来实现Ami Tavory建议的方法的Python代码: from numpy import absolute from numpy.linalg import qr q = qr(R

我正在努力解决以下问题:我有一些非常大的矩阵(比如,至少2000x2000,将来可能会达到10000x1000),秩非常小(2或3,称为N),我需要找到一个有效的Python例程来从中提取线性独立的行(或列,矩阵是对称的!)。我试着取QR分解的Q矩阵的前N列,但它似乎不能正常工作(这可能是错误的吗?)

下面是我用来实现Ami Tavory建议的方法的Python代码:

from numpy import absolute
from numpy.linalg import qr

q = qr(R)[1] #R is my matrix
q = absolute(q)
sums = sum(q,axis=1)

i = 0
while( i < dim ): #dim is the matrix dimension
    if(sums[i] > 1.e-10):
       print "%d is a good index!" % i
    i += 1
从numpy导入绝对值
从numpy.linalg导入qr
q=qr(R)[1]#R是我的矩阵
q=绝对值(q)
总和=总和(q,轴=1)
i=0
而(i1.e-10):
打印“%d”是一个很好的索引!%i
i+=1
这应该告诉我行是否非零,因此R的第I列是否线性独立。

使用线性组合找到一个基(相当于最大的独立子集),并且有效地模拟了这一点

因此,一种方法是应用转置,并检查R矩阵的非零分量。相应的列(在转置矩阵中,即原始矩阵中的行)是独立的


编辑经过一些搜索后,我相信可以解释这一点,但这里有一些示例

import numpy as np

# 2nd column is redundant
a = np.array([[1, 0, 0], [0, 0, 0], [1, 0, 1]])
>> np.linalg.qr(a)[1] # 2nd row empty
array([[ 1.41421356,  0.        ,  0.70710678],
   [ 0.        ,  0.        ,  0.        ],
   [ 0.        ,  0.        ,  0.70710678]])

# 3rd column is redundant
a = np.array([[1, 0, 0], [1, 0, 1], [0, 0, 0], ])
>> np.linalg.qr(a)[1] # 3rd row empty
array([[ 1.41421356,  0.        ,  0.70710678],
   [ 0.        ,  0.        , -0.70710678],
   [ 0.        ,  0.        ,  0.        ]])

# No column redundant
a = np.array([[1, 0, 0], [1, 0, 1], [2, 3, 4], ])
>> np.linalg.qr(a)[1] # No row empty
array([[ 2.44948974,  2.44948974,  3.67423461],
   [ 0.        ,  1.73205081,  1.73205081],
   [ 0.        ,  0.        ,  0.70710678]])

这是我找到问题解决方案的链接!提出的柯西-施瓦茨方法效果很好

谢谢大家!!“对应组件”是指起始矩阵的列/行还是R矩阵的列/行?对不起,我以前从来没有用过这个方法…等等,如果你不熟悉这个方法,我会帮你找到一个链接。非常好!因为我还不清楚应该在R中查找什么,以及如何在起始矩阵中转置结果。@SimoneBolognin看看这些示例是否有用。如果我得到正确答案,您的方法建议查找R矩阵的非空行,其索引应与起始矩阵中线性独立列的索引相对应。我试过了,但似乎不起作用:我知道我的矩阵的秩=2,但我仍然找到了6个非空行,其中只有一个对应于两个真正独立的向量中的一个。另一个(我知道它在矩阵的底部)从未被考虑过。有线索吗?