【问题标题】:Find all pairs of MATLAB structs查找所有 MATLAB 结构对
【发布时间】:2014-10-27 15:00:53
【问题描述】:

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

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

包含在数组中:

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

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

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

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

【问题讨论】:

    标签: arrays matlab struct combinations


    【解决方案1】:

    除了显而易见的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
    

    取决于您想要的索引顺序。

    【讨论】:

      【解决方案2】:

      试试allcomb

      例子:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-04
          • 2013-06-12
          • 1970-01-01
          相关资源
          最近更新 更多