找到所有MATLAB结构对

时间:2014-10-27 15:00:54

标签: arrays matlab struct combinations

我正在处理以下形式的结构:

struct('num', 2,
       'w1', 0.5,
       'w2', 0.5 );

包含在数组中:

array = [struct1, struct2, ..., structN]

我想知道是否有可能自动找到所有结构对,如下所示:

[struct1 struct2
 struct1 struct3
 ...
 struct1 structN
 struct2 struct3
 ...]

作为参考,我发现this question用于简单数组。

3 个答案:

答案 0 :(得分:2)

除了显而易见的nchoosek solution之外,我们还可以更具创造性地获得指数:

>> [j,i] = find(tril(true(N),-1));
>> pairs = array([i(:) j(:)])

我们的想法是建立一个逻辑三角矩阵,并提取非零元素的行/列索引:

>> tril(true(5),-1)
ans =
     0     0     0     0     0
     1     0     0     0     0
     1     1     0     0     0
     1     1     1     0     0
     1     1     1     1     0

>> triu(true(5),1)
ans =
     0     1     1     1     1
     0     0     1     1     1
     0     0     0     1     1
     0     0     0     0     1
     0     0     0     0     0

取决于您希望索引的顺序。

答案 1 :(得分:0)

尝试allcomb

示例:

a = [struct1, struct2, ..., structN];
allcomb(a(:))

答案 2 :(得分:0)

您可以使用nchoosek获取所有对的索引

result = array( nchoosek( 1:N, 2 ) );