将单元格分配给单元格数组

时间:2017-11-03 15:36:17

标签: arrays matlab cell-array

我有以下矩阵:

 adj =     O1   O2    O3    O4    S1    S2    S3    S4    S5

 O1        0     0     0     0     0     1     1     0     0
 O2        0     0     0     0     0     1     0     1     0
 O3        0     0     0     0     0     1     1     0     0
 O4        0     0     0     0     0     0     0     1     1
 S1        0     0     1     0     0     0     0     0     0
 S2        0     1     0     0     0     0     0     0     0
 S3        0     1     1     0     0     0     0     0     0
 S4        0     1     0     1     0     0     0     0     0
 S5        0     0     0     1     0     0     0     0     0

我有一个cellarray nodeNames,其中包含矩阵的行和列的标签,所以:

nodeNames = {O1 O2 O3 O4 S1 S2 S3 S4 S5}

我想要执行以下操作:浏览节点S(i = 5:9)的行中的matirce adj,以及节点O(j = 1; 4)的列如果adj (i, j) = 1,则从Oj获取节点nodeNames的标签,并将其放入我们将命名为w {i}的新cellarray的单元格w中。 所以我希望得到以下内容:

w{1}={O3}.
w{2}={O2}.
w{3}={O2 O3}.
w{4}={O2 O4}.
w{5}={O4}.

我试过这样做,但我的结果中有一个空的cellarray:

for i=5 : 9
    k=1;
    for j=1:4
        if adj(i,j)==1;
            w{i}{k}=nodeNames{j};
        end
        k=k+1;
    end
end

我知道问题在于对cellarray w的分配,但无法得到正确的,任何建议?

1 个答案:

答案 0 :(得分:1)

nodeNamesnodNames,您的k = k + 1也必须在if语句中。

adj=[0,0,0,0,0,1,1,0,0;0,0,0,0,0,1,0,1,0;0,0,0,0,0,1,1,0,0;0,0,0,0,0,0,0,1,1;0,0,1,0,0,0,0,0,0;0,1,0,0,0,0,0,0,0;0,1,1,0,0,0,0,0,0;0,1,0,1,0,0,0,0,0;0,0,0,1,0,0,0,0,0]==1;
nodeNames = {'O1','O2','O3','O4','S1','S2','S3','S4','S5'};
w={};
for i = 5:9
    k=1;
    for j=1:4
        if adj(i,j)
        w{i-4,k}=nodeNames{j};
        k=k+1;
        end
    end
end

结果:

w =

  5×2 cell array

    'O3'      []
    'O2'      []
    'O2'    'O3'
    'O2'    'O4'
    'O4'      []