3

デューイIDを生成する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
4

2 に答える 2

4

あなたは正しい方向に進んでいると思いますが、列ごとに処理する方が簡単です。このように、エントリごとに1つの列を振り返る必要があります。

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 of vector or largest array dimensionので、次回は、を使用することをお勧めしますsize

于 2012-11-07T13:22:51.407 に答える
2

空のスペースに「%Twospaces」が付いたベクトルがある場合、それは本当に簡単です。

あなたはそれを行列に変換することができ、残りは次のように簡単です:

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

その後、スペースを削除して完了できます。

于 2012-11-07T13:14:31.023 に答える