2014-11-17 4 views
0

У меня есть разреженная матрица, такие какКак найти индекс зависимого столбца в разреженных матрицах

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

Я не знаю, почему вы хотите обсудить это в разреженном контексте, но, кроме простой проверки каждой зависимости, вы можете сделать это одновременно. Я предлагаю что-то вроде

%% 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 
Смежные вопросы