我使用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');
任何建议都将不胜感激。
答案 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
,第三个是我的。