我有一个稀疏矩阵,如
A =
(1,1) 1
(3,1) 1
(1,2) 1
(2,2) 1
(1,3) 1
(3,3) 1
(4,3) 1
(4,4) 1
A的完整矩阵可以看如下:
full(A) =
1 1 1 0
0 1 0 0
1 0 1 0
0 0 1 1
我想通过快速方式找到矩阵A的等级(因为我的矩阵可以扩展到10000 x 20000).我尝试通过两种方式来做,但它给出了不同的结果
>转换为完整矩阵并使用查找排名
rank(full(A)) = 3
>使用sprank查找排名
sprank(A) = 4
真正的答案必须是3,这意味着使用第一种方式.但是,需要很长时间才能找到排名,特别是大尺寸的矩阵.我知道第二种方式给出4的原因是因为sprank只告诉你矩阵有多少行/列有非零元素,而rank则报告矩阵的实际等级,表示矩阵的行数是线性独立的. sprank(A)是4但是rank(A)只有3,因为你可以把第三行写成其他行的线性组合,特别是A(2,:) – A(1,:).
我的问题是如何找到具有最低时间消耗的稀疏矩阵的秩
更新:我试图用某种方式.然而,它报告了更长的时间消耗
%% Create random matrix
G = sparse(randi(2,1000,1000))-1;
A=sparse(G) %% Because my input matrix is sparse matrix
%% Measure performance
>> tic; rank(full(A)); toc
Elapsed time is 0.710750 seconds.
>> tic; svds(A); toc
Elapsed time is 1.130674 seconds.
>> tic; eigs(A); toc
Warning: Only 3 of the 6 requested eigenvalues converged.
> In eigs>processEUPDinfo at 1472
In eigs at 365
Elapsed time is 4.894653 seconds.