2016-05-12 74 views
1

我想保存包含不同長度列向量的單元格數組到MATLAB中的文本文件,但我有點卡住了。保存包含不同長度veltors文本文件在MATLAB中的單元格

cell_structure = {[1;2;3;...546] [1;2;3;...800] [1;2;3;...1011] [1;2;3;...1118] [1;2;3;...1678]} 

我嘗試使用下面的代碼:

fid = fopen('myFile.txt', 'w') ; 
for cId = 1 : numel(cell_structure) 
    fprintf(fid, '%f ', cell_structure{cId}) ; 
    fprintf(fid, '\r\n') ; 
end 

問題是,當我打開文本文件的列向量保存爲行向量和它們的長度被限制在545。任何幫助將是非常感激。

+1

你能告訴我們一個你想要的輸出的例子嗎? – jgrant

+0

您是否嘗試過使用'-append''屬性的'dlmwrite'? – Crowley

+0

@Crowley我曾嘗試使用dlmwrite('test.txt',cell {i},' - append'),然後增加i。但是,它將所有列矢量添加到文本文件的一列中,我希望單元格數組中的每個列矢量都保存在文本文件的各個列中。 –

回答

1

我用Elijah Rockers的想法來填充較短的列向量,所以它們都是相同的長度。 Crowley指出,dmlwrite和cvswrite不能處理空單元格。我發現可以處理空單元格的功能:

https://github.com/mkoohafkan/UCBcode-Matlab/blob/master/OtherPeoplesFunctions/dlmcell.m

這裏是我的代碼來補齊和保存數據。

for k = 1:max(cellfun('length',cell)); %longest column vector length 
    for j = 1:length(cell); % number of colum vctors 
     if k > length(cell{j}); % if the index is longer than colum vector length 
      new_cell{k,j} = []; % pad vector 
     else 
     new_cell{k,j} = cell{j}(k); %otherwise add to array 
     end 
    end 
end 
dlmcell('test.txt',new_cell,',') 

它的工作原理就像魅力一樣,單元格數組中的所有列向量現在都保存在文本文件的不同列中。

1

您的第一個迭代for循環打印整個第一個數組,在cell_structure中。無論這個數組是行還是列矢量都沒關係,因爲您使用的是fprintf(),它將一個接一個地打印每個元素。

這比我現在可以在工作中管理的有點棘手......但您需要填充較短的向量以匹配最大的長度。

然後:

for k = 1:size_of_largest_vector 
    for j = 1:total_number_of_columns 
     new_cell{k,j} = cell_structure{j}(k) 
    end 
end 

這會給你所有的列向量的數組。

然後,使用空格分隔csvwrite()來編寫列。

+0

只是看到你想爲每個列向量單獨的柱...讓我嘗試解決這個問題,我會編輯 –

+0

對不起,關於將單元格結構定義爲行向量的困惑,現實生活中它們是列向量。 –

相關問題