Matlab,如何保存txt文件,使用save函数,将双倍数保存为整数,但保持NaN
我正在使用MatlabR2015A,希望将一个双精度矩阵保存到txt文件中。一些指数具有Matlab,如何保存txt文件,使用save函数,将双倍数保存为整数,但保持NaN,matlab,Matlab,我正在使用MatlabR2015A,希望将一个双精度矩阵保存到txt文件中。一些指数具有NaN值。所有其他值,尽管格式为双精度,但基本上都是整数。没有分数值 我更希望保存的值在txt文件中显示为整数,当然NaN值除外,它必须保持NaN 我的数据示例,以及它在保存的txt文件中的显示方式: NaN 81 272 NaN 787 314 778 174 606 427 720 677 我可以在循环中使用fprintf,或者使用单个dlmwrite,但对于大型矩阵,这两种方法都非常慢。使用save函
NaN
值。所有其他值,尽管格式为双精度,但基本上都是整数。没有分数值
我更希望保存的值在txt文件中显示为整数,当然NaN
值除外,它必须保持NaN
我的数据示例,以及它在保存的txt文件中的显示方式:
NaN 81 272
NaN 787 314
778 174 606
427 720 677
我可以在循环中使用fprintf
,或者使用单个dlmwrite
,但对于大型矩阵,这两种方法都非常慢。使用save
函数的速度快得多,但我不知道如何实现所需的输出(其中double被写为整数,并保留NaN
),而且,由于格式的原因,save
生成的文件大小要大得多
使用保存功能的输出示例:
NaN 8.1000000e+01 2.7200000e+02
NaN 7.8700000e+02 3.1400000e+02
7.7800000e+02 1.7400000e+02 6.0600000e+02
4.2700000e+02 7.2000000e+02 6.7700000e+02
下面是一个简单的代码示例,使用dlmwrite
(需要的输出,但速度慢)和save
(不需要的输出,但速度快)
如果您有任何建议,我们将不胜感激。您是否尝试过不带循环的
fprintf
使用带有100000
而不是1000
的更大测试用例会让我
Elapsed time is 4.290399 seconds.
Elapsed time is 0.207824 seconds.
Elapsed time is 0.123091 seconds.
其中第一个是您的
dlmwrite
,第二个是您的save
,第三个是我的。我想您有充分的理由不使用save写入二进制文件?谢谢!!我很高兴!我不知道为什么,但我从未意识到fprintf
可以一次完成。另外,在写入之前,我注意到数据的转置。@ctp,实际上,您需要转置,因为fprintf
以列主方式访问其变量。如果您想象它基本上是m(:)
,这意味着您通常需要这种转置,那么很容易记住。
m = round(rand(1000,3)*1000);
m(1:10,1) = NaN;
%
filename='file_by_fprintf.txt';
dlmwrite(filename, 'column1 column2 column3', 'delimiter', '');
fid=fopen(filename,'a');
fprintf(fid,'%7d %7d %7d\n',m');
fclose(fid);
Elapsed time is 4.290399 seconds.
Elapsed time is 0.207824 seconds.
Elapsed time is 0.123091 seconds.