我想创建一个带有字段的结构,元素的数量会根据n
的值变为n(n-1)/2
。
,例如n=4
,s=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
答案 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