动态删除稀疏矩阵表示中的列和行

时间:2014-06-10 08:09:03

标签: matlab row sparse-matrix

我在matlab中得到了一个方形矩阵的稀疏表示。我试图通过去除行和列的时间来执行特征分析,计算其本征值和特征向量n-1次。我的问题是如何执行行和列删除。我的代码:

A = textread('matrices.txt');  %nx3 matrix
for k=1:n% size of the matrix
   display(k)
   temp = A;
   for index_i =1:length(temp)
      if(temp(index_i, 1)== k  | temp(index_i,2) == k)
          temp(index_i,:) = [];
      end
   end
   S = spconvert(temp); % sparse representation of the matrix
   [a b] = eigs(S); % calculate the first six eigenvalues and eigenvectors
   temp_vectors(:,k) =  a(:,1);
   temp_values(k) = b(1,1);
end

我遇到了索引问题,行温度(index_i,:) = [];基本上你是对的我做了不同的事情,但是你的实现更好:

for k=1:10000 % size of the matrix
temp = A;
counter = 1;
list = [];
display(k)
for index_i =1:length(temp)
    if(temp(index_i, 1)== k  | temp(index_i,2) == k)
        list(counter) = index_i;
        counter = counter + 1;
    end
end
temp(list(:),:)= [];
size(temp)
S = spconvert(temp); % sparse representation of the matrix
[a b] = eigs(S); % calculate the first six eigenvalues and eigenvectors
 %temp_vectors(:,k) =  a(:,1);
temp_values(k) = b(1,1);
name = strcat('eigen_vectors\eigen_vector_', int2str(k) ,'.mat');
vec = a(:,1);
save(name, 'vec');

此外,出现了新的麻烦。问题在于第n个本征分析的计算。我必须删除第10.000行和列,以便对我的矩阵进行特征分析。然而,通过这样做,它计算9999大小的特征向量,因为它删除了第10000行/列。有没有想过克服这个问题?

1 个答案:

答案 0 :(得分:1)

使用[]删除值时,您正在更改矩阵的大小。但是在你的内部循环中,你index_i运行到temp的初始最大大小。因此,您可能会达到index_i大于temp当前大小的点,您将收到相应的错误。

您可以使用逻辑索引在一个步骤中执行此操作,而不是使用循环一次删除它们:

temp(temp(:,1)==k|temp(:,2)==k,:)=[];