如何在稀疏矩阵中找到依赖列的索引

时间:2014-11-17 07:06:01

标签: matlab matrix

我有一个稀疏矩阵,例如

A=sparse(zeros(10,20))% 10 rows by 20 columns

现在,对于每次迭代,我将为每列添加随机值

for i=1:20
%% insert value - it is done
end

我的任务是找到依赖列的索引,并将其替换为依赖列中所有元素的零值。例如,完整矩阵A可以假定为

full(A)=
        [ 
          1 1 1
          0 0 1
          1 1 1 
         ]

我们看到第二列是第一列的从属行。所以我的预期结果如

   full(A)=
        [ 
          1 0 1
          0 0 1
          1 0 1 
         ]

你能帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

我不知道你为什么要在稀疏上下文中讨论这个问题,但除了简单地检查每个依赖项之外,你可以同时进行。我建议像

这样的东西
%% create some data...
A = double(rand(3,3) > 0.5)

%% create linearDependencyMatrix with                  % important
%  linearDependencyMatrix(i,j) == 1                    % part
%            iff                                       %
%  column i and column j are linearly dependent        %
AA = A'*A;                                             %
normCols = diag(AA);                                   %
normMat = normCols*normCols';                          %
linearDependencyMatrix = abs(AA.^2-normMat) < 10*eps   %

%% set linearly dependent columns to 0
nonzeroCols = find(sum(abs(A)) ~= 0);
numCols = size(A,2);
for i = nonzeroCols
    for j = i+1:numCols
        if linearDependencyMatrix(i,j)
            A(:,j) = 0;
        end
    end
end
A

示例输出

A =
     1     0     0
     1     0     0
     1     1     1


linearDependencyMatrix =
     1     0     0
     0     1     1
     0     1     1


A =
     1     0     0
     1     0     0
     1     1     0