我在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行/列。有没有想过克服这个问题?
答案 0 :(得分:1)
使用[]
删除值时,您正在更改矩阵的大小。但是在你的内部循环中,你index_i
运行到temp
的初始最大大小。因此,您可能会达到index_i
大于temp
当前大小的点,您将收到相应的错误。
您可以使用逻辑索引在一个步骤中执行此操作,而不是使用循环一次删除它们:
temp(temp(:,1)==k|temp(:,2)==k,:)=[];