如何在Matlab中编辑单元格数组

3

我有一个单元格数组,它来自于一个生成杜威编号的Matlab代码:

 POT1 = 

        'a0'      []      []      []
        'a0'    'c0'      []      []
        'a0'    'b0'      []      []
        'a0'    'c1'      []      []
        'a0'    'd0'      []      []
        'a0'    'c0'    'd1'      []
        'a0'    'b0'    'd2'      []
        'a0'    'd0'    'd3'      []
        'a0'    'd0'    'c2'      []
        'a0'    'd0'    'b1'      []
        'a0'    'd0'    'd4'      []
        'a0'    'c1'    'c3'      []
        'a0'    'c1'    'b2'      []
        'a0'    'c1'    'c3'    'd5'
        'a0'    'c1'    'b2'    'd6'
        'a0'    'd0'    'b1'    'd7'
        'a0'    'd0'    'c2'    'd8'

请注意,列1是列2的父级,列2是列3的父级,以此类推。
因此,我想编写一段代码,按以下方式提供每个单元格的完整名称:
POT1 =
  a0      []       []          []
  a0    a0.c0      []          []
  a0    a0.b0      []          []
  a0    a0.c1      []          []
  a0    a0.d0      []          []
  a0    a0.c0    a0.c0.d1      []
  a0    a0.b0    a0.b0.d2      []
  a0    a0.d0    a0.d0.d3      []
  a0    a0.d0    a0.d0.c2      []
  a0    a0.d0    a0.d0.b1      []
  .
  .
  .
  .     

我编写的代码不完整,会出现“索引超出矩阵维度”的错误:
for i=1:length(POT1)
      for j=3:size(POT1,2)
          if ~isempty(POT1{i,j})
          POT1{i,j}=[POT1{i,j-2} POT1{i,j-1} POT1{i,j}];
          end
      end
  end
  POT1
2个回答

4

我认为你的思路是正确的,但如果按列处理会更容易。这样一来,每个条目只需要查看前一列:

for jj=2:size(POT1,2)
    for ii=1:size(POT1,1)
        if ~isempty(POT1{ii,jj})
            POT1{ii,jj}=[POT1{ii,jj-1} '.' POT1{ii,jj}];
        end
    end
end

顺便提一下:length 返回的是向量或最大数组维度的长度,所以下次最好使用 size


2

如果您的向量中有空格,可以将其转换为矩阵,剩下的就很简单了:

<p>如果您的向量中有空格,可以将其转换为矩阵,剩下的就很简单了:</p>

[POT1(:,1:2) '.' POT1(:,3:4)] 

之后你只需要删去空格就完成了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接