2013-11-22 27 views
1

根據標題,我希望將兩個列向量寫入文件(格式:3位十六進制,製表符,4位十六進制)。我想我可以用下面的做:在Matlab中有效地將兩個數組寫入一個文件

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

對於這個花費很長的時間,大型載體,我敢肯定是有可能這樣做的更好的辦法?

我想到了兩個數組重組爲一個(每秒入交織),並一氣呵成寫出來 - 但我似乎無法得到那個工作

謝謝!

回答

2

這似乎爲我的工作需要:

fprintf中(FID,[ '%03X%04X \ n'],[IMGA(:,1),IMGB(:,1)]「) ;

+0

不相關但很好知道:你不需要圍繞字符串參數的括號。 –

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

我覺得這樣更快。

+0

它的速度肯定比較快,但是它使用指定的格式打印所有的imgA,然後所有的imgB – trican

+0

看到你已經找到了解決方案。我的代碼錯過了轉置。 – Daniel

+0

是的,謝謝丹尼爾。看到這與我所需要的東西非常接近,我很樂意將此標記爲答案,如果您想編輯上面的帖子並添加轉置。 – trican

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


如果你不會有十六進制格式,但小數這種做法是definetely更快:

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

假設AB是列向量,否則轉置它們。

已用時間爲0.155126秒。

相關問題