在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这是我键入的方法,就在我看到你的答案之前:-)对不起。下次我再等几秒钟不是一个单一的指令,但紧凑和足够快,谢谢。