2016-05-12 95 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

对不起,关于将单元格结构定义为行向量的困惑,现实生活中它们是列向量。 –

相关问题