将包含不同长度向量的单元格保存到MATLAB中的文本文件中

将包含不同长度向量的单元格保存到MATLAB中的文本文件中,matlab,text,vector,cell-array,Matlab,Text,Vector,Cell Array,我试图将包含不同长度列向量的单元格数组保存到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, '%

我试图将包含不同长度列向量的单元格数组保存到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。任何帮助都将不胜感激

for循环的第一次迭代以cell_结构打印整个第一个数组。这个数组是行向量还是列向量无关紧要,因为您使用的是fprintf(),它将一个接一个地打印每个元素

这比我现在在工作中能应付的要复杂一些。。。但是您需要填充较短的向量,以匹配最大向量的长度

然后:

这将为您提供一个包含所有列向量的数组


然后,使用空格分隔的
csvwrite()
来写入列。

我使用了Elijah Rockers的想法来填充较短的列向量,因此它们的长度都相同。克劳利指出,dmlwrite和CVSWITE不能处理空电池。我发现了一个可以处理空单元格的函数:

这是我用来填充和保存数据的代码

    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,',')

它像一个符咒一样工作,单元格数组中的所有列向量现在都保存在文本文件的不同列中。

您能给我们展示一个您想要的输出示例吗?您是否尝试过使用
'-append'
属性?@Crowley我尝试过使用dlmwrite('test.txt',cell{I},'-append'),然后递增I。但是,它将所有列向量添加到文本文件中的一列中,我希望单元格数组中的每个列向量都保存在文本文件中的各个列中。@jgrant我希望输出是一个以制表符分隔的文本文件,其中单元格数组中的每个列向量都保存在文本文件的各个列中。这里有一些误解。我尝试了你提到的代码,我得到了多行包含数字1,2,3,。。。在您的示例中,我只能看到行向量。列向量是
[1;2;3;…]
。刚才看到您希望每个列向量有单独的列。。。让我试着解决这个问题,我会为将单元格结构定义为行向量的混乱感到抱歉,在现实生活中,它们是列向量。
    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,',')