2014-10-27 32 views
1

我处理结构形式:找到所有对MATLAB结构的

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

数组中包含的:

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

我想知道是否可以自动全部找到对的结构,如下所示:

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

作为参考,我发现this question简单ARRA YS。

回答

0

尝试allcomb

例子:

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

您可以使用nchoosek让所有对

result = array(nchoosek(1:N, 2)); 
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 

取决于何种顺序要用于索引。