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

Save cell containing different length vectors to text file in 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。任何帮助将不胜感激。

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

这将为您提供所有列向量的数组。

然后,使用 space 分隔的 csvwrite() 来编写列。

我使用 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,',')

它就像一个魅力,元胞数组中的所有列向量现在都保存在文本文件的单独列中。