Matlab,如何保存txt文件,使用保存功能,将双精度保存为整数,但保留NaN

时间:2015-08-21 22:38:44

标签: matlab

我使用Matlab R2015a,并希望将双打矩阵保存到txt文件中。一些指数具有NaN个值。尽管double作为格式,但所有其他值基本上都是整数。没有小数值。

我希望保存的值在txt文件中显示为整数,当然除了NaN值,其中必须保留NaN

我的数据示例及其在保存的txt文件中的显示方式:

NaN 81 272
NaN 787 314
778 174 606
427 720 677

我可以在循环中使用fprintf或使用单个dlmwrite来执行此操作,但对于大型矩阵,这两种方法都非常慢。使用save函数快得多,但我不知道如何实现所需的输出(将双精度写为整数,并保留NaN&# 39; s)另外,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(不需要的输出,但速度很快)。

% generate some data
m = round(rand(1000,3)*1000);
m(1:10,1) = NaN;

% dlmwrite method. Using dlmwrite to create header line and append the data.
% Output is as desired.
dlmwrite('file_by_dlmwrite.txt', 'column1 column2 column3', 'delimiter', '');
dlmwrite('file_by_dlmwrite.txt', m, 'delimiter', ' ', '-append');

% save method. Using dlmwrite only for the header line, and save function to append the data.
% Output is not as desired.
dlmwrite('file_by_save.txt', 'column1 column2 column3', 'delimiter', '');
save('file_by_save.txt', 'm', '-ascii', '-append');

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您是否在没有循环的情况下尝试了v = 'file.avi' p = subprocess.Popen(["ffmpeg -i {} -c copy getit.mkv".format(v)], cwd=working_directory)

fprintf

使用更大的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); 而不是100000的测试用例会给我

1000

第一个是Elapsed time is 4.290399 seconds. Elapsed time is 0.207824 seconds. Elapsed time is 0.123091 seconds. ,第二个是dlmwrite,第三个是我的。