我有一个稀疏矩阵,例如
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
]
你能帮我解决这个问题吗?
答案 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