在Matlab中将2d矩阵导出为三元组格式CSV文件的最快方法
我想转换二维矩阵,例如:在Matlab中将2d矩阵导出为三元组格式CSV文件的最快方法,matlab,csv,Matlab,Csv,我想转换二维矩阵,例如: 10 2 3 5 1,1,10 1,2,2 2,1,3 2,2,5 到(行、列、值)CSV文件,例如: 10 2 3 5 1,1,10 1,2,2 2,1,3 2,2,5 是否可以在单个Matlab命令中执行此操作?我没有找到使用单个命令的方法,但请尝试以下代码: [i1,i2] = ind2sub(size(A),1:numel(A)); csvwrite('test.csv',[i2',i1',reshape(A',numel(A),1)]);
10 2
3 5
1,1,10
1,2,2
2,1,3
2,2,5
到(行、列、值)CSV文件,例如:
10 2
3 5
1,1,10
1,2,2
2,1,3
2,2,5
是否可以在单个Matlab命令中执行此操作?我没有找到使用单个命令的方法,但请尝试以下代码:
[i1,i2] = ind2sub(size(A),1:numel(A));
csvwrite('test.csv',[i2',i1',reshape(A',numel(A),1)]);
输出为:
type test.csv
1,1,10
1,2,2
2,1,3
2,2,5
假设
A
是输入矩阵,这里可以建议两种方法
基于的解决方案-
output_file = 'data.txt'; %// Edit if needed to be saved to a different path
At = A.'; %//'
[y,x] = ndgrid(1:size(At,1),1:size(At,2));
fid = fopen(output_file, 'w+');
for ii=1:numel(At)
fprintf(fid, '%d,%d,%d\n',x(ii),y(ii),At(ii));
end
fclose(fid);
基于-
At = A.'; %//'
[y,x] = ndgrid(1:size(At,1),1:size(At,2));
dlmwrite(output_file,[x(:) y(:) At(:)]);
一些快速测试似乎表明,
fprintf
在不同的输入数据量下表现更好。+1用于第二种方法csvwrite
可以工作too@LuisMendo如果查看csvwrite
的源代码,它会调用dlmwrite
。所以dlmwrite
实际上保存了一个函数调用,我认为这很好。@Divakar很高兴了解csvwrite
和dlmwrite
@Nemesis是的,寻找这样的工具是一个很好的练习,不是因为我经常使用它们:)+1这是我键入的方法,就在我看到你的答案之前:-)对不起。下次我再等几秒钟不是一个单一的指令,但紧凑和足够快,谢谢。