在matlab中增加struct的struct值

时间:2016-05-03 21:23:35

标签: matlab field structure

我想创建一个带有字段的结构,元素的数量会根据n的值变为n(n-1)/2

,例如n=4s=struct('name', { {1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4} })

我编写了这段代码,但它只生成循环的最后一个值:

function [ b ] = Bwcl( cl )
n=size(cl,1);
for k=1:n-1
     for i=k:n-1
         b(k).name={num2str(k),num2str(i+1)};
     end
end

2 个答案:

答案 0 :(得分:2)

DomDev正确回答了这个问题。但是,我想给你一个没有循环的方法:

n = 4;
ind = nchoosek(1:n, 2);
D = num2cell(ind, 2);
s = struct('name', D);

第二行代码使用nchoosek查找从1到n的所有唯一对的组合。这会产生一个矩阵,其中每一行都是唯一的一对值。然后我们使用num2cell将其转换为单元格数组,其中每对值占据单元格数组中的一个单元格,例如您在上面的表达方式。然后,我们将此单元格数组提供给struct以生成最终所需的结构。

如果您更喜欢单行(如果您计算声明为n,则为两行):

n = 4;
s = struct('name', num2cell(nchoosek(1:n, 2), 2));

答案 1 :(得分:1)

您忘记了代码的计数器。问题是b(k),它在同一位置多次重写。使用下面显示的b(计数器),它可以工作。

counter = 0;
n=size(cl,1);
for k=1:n-1
     for i=k:n-1
         counter = counter + 1;
         b(counter).name={num2str(k),num2str(i+1)};
     end
end