Matlab,如何保存txt文件,使用save函数,将双倍数保存为整数,但保持NaN

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函

我正在使用MatlabR2015A,希望将一个双精度矩阵保存到txt文件中。一些指数具有
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.