我有matlab格式的稀疏矩阵,我想将它们转换为按行排序的ijv坐标格式(第一列)。下面是我的尝试但它不是那么有效,因为矩阵非常大(有时nnz> 1M)并且这段代码需要大量内存。任何更好的主意都会受到高度赞赏。
function printIJV(file_name,S)
% S is the sparse matrix in Matlab storing only nonzero values and their indices.e.g (1,1) 20 , (2,1) 30 , (3,2) 22 ,...
[i,j,v] = find(S);
temp2 = [i,j,v];
temp = sortrows(temp2 ,temp2(1) );
file_id = fopen(file_name,'wt');
% header: n-rows n-columns n-values
fprintf(file_id,'%d %d %d\n', size(S,1) ,size(S,2),size(v,1) );
n = size(temp , 1);
for i=1:n
%minus one for zero-based indexing
fprintf(file_id,'%d %d %g\n',temp(i,1)-1 , temp(i,2)-1 , temp(i,3));
end
fclose(file_id);
end
答案 0 :(得分:0)
你可以尝试
[j,i,v] = find(S')