我有一个稀疏矩阵,例如
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通过快速的方式找到矩阵的秩(因为我的矩阵可以扩展到)。我尝试通过两种方式做到这一点,但它给出了不同的结果
转换为完整矩阵并使用
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.