在Matlab中有效地将两个数组写入文件

时间:2013-11-22 12:41:23

标签: matlab optimization

根据标题,我希望将两个列向量写入文件(格式:3位十六进制,制表符,4位十六进制)。我想我可以用以下方法做到这一点:

for i=1:size(imgA,1)
   fprintf(fid, ['%03X %04X \n'], imgA(i,1), imgB(i,1));
end

对于大尺寸的矢量,这需要很长时间,我敢肯定有一种更好的方法可以做到这一点吗?

我考虑过将两个阵列重组为一个(每隔一个句子交错)并一次性写出来 - 但我似乎无法让它工作

谢谢!

3 个答案:

答案 0 :(得分:2)

这似乎符合我的需要:

fprintf(fid,['%03X%04X \ n'],[imgA(:,1),imgB(:,1)]');

答案 1 :(得分:1)

fprintf(fid, ['%03X %04X \n'], [imgA(:,1);imgB(:,1)]);

我认为这更快。

答案 2 :(得分:1)

我会尝试dlmwrite

delim = repmat('   ',length(imgA(:,1)),1);
output = [ imgA(:,1) , delim , imgB(:,1) ]
dlmwrite('test.txt',output,'')

十六进制格式已经是字符串,所以它很简单,但你需要一个分隔符矩阵来在你的向量之间获得一些空间。


示例:

tic
A = dec2hex( randi(10000,10000,1) );
B = dec2hex( randi(10000,10000,1) );
delim = repmat('     ',length(A),1);

output = [A, delim, B];
dlmwrite('test.txt',output,'');
toc
我猜得很快:

  

经过的时间是0.860588秒。

对于100000个元素:

  

经过的时间是8.652231秒。

所以时间明显与元素数量呈线性关系。我不知道它是否最终比fprintf

更快

如果您不具有十六进制格式,但十进制数字这种方法将更快地定义:

A = randi(10000,100000,1) ;
B = randi(10000,100000,1) ;
C = [A, B];
save('test.txt','C','-tabs','-ascii');

假设AB是列向量,否则转置它们。

  

经过的时间是0.155126秒。