如果你想要寫東西寫得很快......而且由於我們正在處理單元陣列,最簡單的事情就是製作一對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