【问题标题】:Save cell containing different length vectors to text file in MATLAB将包含不同长度向量的单元格保存到 MATLAB 中的文本文件
【发布时间】:2016-05-12 15:52:38
【问题描述】:

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

【问题讨论】:

  • 您能给我们看一个您想要的输出示例吗?
  • 你试过dlmwrite'-append' 属性吗?
  • @Crowley 我尝试使用 dlmwrite('test.txt',cell{i},'-append') 然后递增 i。但是它将所有列向量添加到文本文件中的一列中,我希望将元胞数组中的每个列向量保存在文本文件的各个列中。
  • @jgrant 我希望输出是一个制表符分隔的文本文件,其中元胞数组中的每个列向量都保存在文本文件的单独列中。
  • 这里有一些误解。我尝试了您提到的代码,我得到了包含多行的文件,其中包含数字 1,2,3,... 而且我在您的示例中只能看到行向量。列向量是[1;2;3;...]

标签: matlab text vector cell-array


【解决方案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() 来写入列。

【讨论】:

  • 刚刚看到您需要为每个列向量使用单独的列...让我尝试解决这个问题,然后进行编辑
  • 很抱歉将单元格结构定义为行向量,在现实生活中它们是列向量。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多