我有一个矩阵A = np.array([[1,1,1],[1,2,3],[4,4,4]]),我只想在我的新矩阵中保留线性独立的行。答案可能是A_new = np.array([1,1,1],[1,2,3]])或A_new = np.array([1,2,3],[4,4,4])。
由于我的矩阵非常大,所以我需要将其分解为较小的线性独立满秩矩阵。有人能帮忙吗?
由于我的矩阵非常大,所以我需要将其分解为较小的线性独立满秩矩阵。有人能帮忙吗?
q,r = np.linalg.qr(A.T)
然后删除任何 R_{i,i} 为零的列。
例如,您可以执行以下操作:
A[np.abs(np.diag(R))>=1e-10]
虽然在精确算术中这将完美地运行,但在有限精度中可能效果不佳。几乎任何矩阵都是数值独立的,因此您需要某种门槛来确定是否存在线性依赖关系。如果使用内置的QR方法,则必须确保之前删除的列没有依赖。
如果需要更稳定的解决方案,可以迭代地解决最小二乘问题。
A.T[:,dependent_cols] x = A.T[:,col_to_check]
使用稳定的直接方法。如果您能够精确地解决此问题,则 A.T[:,k] 取决于先前向量,组合由 x 给出。
选择使用哪个求解器也可能受数据类型的影响。