根据标题,我希望将两个列向量写入文件(格式:3位十六进制,制表符,4位十六进制)。我想我可以用以下方法做到这一点:
for i=1:size(imgA,1)
fprintf(fid, ['%03X %04X \n'], imgA(i,1), imgB(i,1));
end
对于大尺寸的矢量,这需要很长时间,我敢肯定有一种更好的方法可以做到这一点吗?
我考虑过将两个阵列重组为一个(每隔一个句子交错)并一次性写出来 - 但我似乎无法让它工作
谢谢!
答案 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');
假设A
和B
是列向量,否则转置它们。
经过的时间是0.155126秒。