如果你想要写东西写得很快......而且由于我们正在处理单元阵列,最简单的事情就是制作一对for
循环。假设你已经在out
定义了你的矩阵:
out_cell = cell(size(out,1),size(out,1));
for idx = 1 : size(out,1)
for idx2 = 1 : idx
vals = find(out(idx,:) & out(idx2,:));
out_cell{idx,idx2} = vals;
out_cell{idx2,idx} = vals;
end
end
对于每一对行,idx
和idx2
,我们看看,看看是否有列在具有1项匹配,然后将指标到各个小区在2D单元阵列中的位置。请注意,因为会遇到重复行对(即检查第3行和第5行,与第5行和第3行比较),因此不需要第二个for
循环遍历其他所有行。我们只需要检查由外部循环描述的当前行,并且我们只是使用交换的行索引编写相同的值...所以这是一个“对称”矩阵。
如果您希望对角线元素为空,只需更改内部for
循环,使其变为for idx2 = 1 : idx-1
而不是for idx2 = 1 : idx
。
你的榜样,我们得到:
>> out_cell
out_cell =
[1x3 double] [1x2 double] [ 3] [1x2 double]
[1x2 double] [1x3 double] [ 3] [1x2 double]
[ 3] [ 3] [1x2 double] [ 4]
[1x2 double] [1x2 double] [ 4] [1x4 double]
>> celldisp(out_cell)
out_cell{1,1} =
2 3 5
out_cell{2,1} =
2 3
out_cell{3,1} =
3
out_cell{4,1} =
2 5
out_cell{1,2} =
2 3
out_cell{2,2} =
1 2 3
out_cell{3,2} =
3
out_cell{4,2} =
1 2
out_cell{1,3} =
3
out_cell{2,3} =
3
out_cell{3,3} =
3 4
out_cell{4,3} =
4
out_cell{1,4} =
2 5
out_cell{2,4} =
1 2
out_cell{3,4} =
4
out_cell{4,4} =
1 2 4 5
为什么'输出{1,3} = [1]'?它不应该是'[3]'吗? – 2015-04-02 16:27:05
@LuisMendo对不起,这是我的坏,我犯了一个错误 - 感谢指出。更正问题 – 2015-04-02 16:30:53
而不应该'输出{1,1}'是'[2 3 5]'? – 2015-04-02 16:32:55