2016-05-12 2 views
1

異なる長さの列ベクトルを含むセル配列をMATLABのテキストファイルに保存しようとしていますが、ちょっとスタックしています。異なる長さのベルタを含むセルを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'、セル{i}、 ' - append')を使って試してみました。ただし、すべての列ベクトルをテキストファイルの1つの列に追加するため、セル配列の各列ベクトルをテキストファイルの個々の列に保存する必要があります。 –

答えて

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内の最初の配列ENTIREを表示します。 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

セルの構造を行ベクトルとして定義することについての混乱を残念に思っています。 –

関連する問題