如何消除矩阵中对其排名没有贡献的行?
How do I eliminate the rows of my matrix that don't contribute to its rank?
我是 MATLAB 的新手,我有一个问题看起来很明显,但我不太明白如何去做。
假设我有一个 100 x 100 的矩阵,它的秩为 50。我怎样才能减小它的尺寸,使其变为 50 x 100?也就是说,如何消除那些对其排名没有贡献的行?
您可以使用 rref
to determine which columns in your matrix form the column space,因此哪些向量决定了矩阵的秩。给定您正在检查的矩阵 A
,您可以这样调用 rref
:
[R,RB] = rref(A);
R
会将您的矩阵分解为 row-reduced echelon form,而 RB
表示构成矩阵 A
基础的列索引。因此,要查找您要查询的内容,您只需执行以下操作:
Areduced = A(:,RB);
Areduced
将是仅由构成 A
列 space 的那些基向量组成的矩阵,因此减少矩阵 A
以便它只由那些允许您的矩阵满秩的列组成。
但是,根据您的问题判断,您想沿行而不是列进行操作。因此,您可以先转置矩阵,对结果使用 rref
,然后在完成后转回:
Atranspose = A.';
[R,RB] = rref(Atranspose);
Areduced = Atranspose(:,RB).';
我是 MATLAB 的新手,我有一个问题看起来很明显,但我不太明白如何去做。
假设我有一个 100 x 100 的矩阵,它的秩为 50。我怎样才能减小它的尺寸,使其变为 50 x 100?也就是说,如何消除那些对其排名没有贡献的行?
您可以使用 rref
to determine which columns in your matrix form the column space,因此哪些向量决定了矩阵的秩。给定您正在检查的矩阵 A
,您可以这样调用 rref
:
[R,RB] = rref(A);
R
会将您的矩阵分解为 row-reduced echelon form,而 RB
表示构成矩阵 A
基础的列索引。因此,要查找您要查询的内容,您只需执行以下操作:
Areduced = A(:,RB);
Areduced
将是仅由构成 A
列 space 的那些基向量组成的矩阵,因此减少矩阵 A
以便它只由那些允许您的矩阵满秩的列组成。
但是,根据您的问题判断,您想沿行而不是列进行操作。因此,您可以先转置矩阵,对结果使用 rref
,然后在完成后转回:
Atranspose = A.';
[R,RB] = rref(Atranspose);
Areduced = Atranspose(:,RB).';