如何在matlab中构造无序对结构?
让我们用E表示这样的结构,其中E = {(i,j),(k,p),...}和(i,j)=(j,i)。那么如何在matlab中构造E?有什么建议 ?
提前谢谢
答案 0 :(得分:1)
Bas Swinckels建议的是一种有效存储集合的方法。由于每个操作包含两个元素,我将使用具有三个约束的矩阵:
对于任何输入,您可以使用此代码确保三个属性:
>> M=[1,2;2,1;3,2;1,3;3,1]
M =
1 2
2 1
3 2
1 3
3 1
>> sortrows(unique(sort(M,2),'rows'))
ans =
1 2
1 3
2 3
(sortrows
对于大多数matlab版本来说都是多余的,因为unique
已经过了排序)
矩阵表示的替代方案是一个单元格:
{[1,2],[1,3],[2,3]}
它可能性能较差,但您可以将其扩展到不同大小的元组。在这种情况下,使用位掩码表示集合的最后一个替代方案似乎并不高效。
答案 1 :(得分:0)
任何具有相同行和列的对称矩阵都可以满足您的要求:
a = zeros(3)
或b = ones(2)
如果更改行和列,这两个矩阵是相同的示例,意思是:
a( i, j ) = a( j, i );
我希望这可以帮到你。