在Matlab中将2d矩阵导出为三元组格式CSV文件的最快方法

时间:2014-11-14 11:39:23

标签: matlab csv

我想转换2d矩阵,例如:

10  2
3   5

到(row,col,value)CSV文件,例如:

1,1,10
1,2,2
2,1,3
2,2,5

是否可以在单个Matlab命令中完成?

2 个答案:

答案 0 :(得分:2)

我没有找到使用单个命令的方法,但请尝试以下代码:

[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

答案 1 :(得分:2)

假设A是输入矩阵,可以在这里建议两种方法。

基于

fprintf 的解决方案 -

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);

基于

dlmwrite 的方法 -

At = A.';  %//'
[y,x] = ndgrid(1:size(At,1),1:size(At,2));
dlmwrite(output_file,[x(:) y(:) At(:)]);

一些快速测试似乎表明fprintf在不同的输入数据中表现更好。