将稀疏矩阵形式的matlab格式转换为ijv坐标格式

时间:2018-03-31 02:50:58

标签: matlab sparse-matrix

我有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

1 个答案:

答案 0 :(得分:0)

你可以尝试

[j,i,v] = find(S')