我试图将非恒定单元格数组值分配给整个结构的字段。
我已经编写了一个实现此目的的for循环脚本:
n = 5;
c = {[0,0]};
b(1:n) = struct('c',c);
for i=1:5
b(i).c(1) = i;
b(i).c(2) = i+1;
end
,但希望能够向量化c的分配。
是否可以对这些代码进行矢量化处理,还是最好使用数字数组?
答案 0 :(得分:1)
这是一个适合您提供的示例的矢量化解决方案,请注意,该示例是为您创建的示例,但是可以使用相同的逻辑轻松将其概括化
使用您的代码,我们得到以下输出:
for i=1:5
disp(b(i))
end
c =
1 2
c =
2 3
c =
3 4
c =
4 5
c =
5 6
向量化的实现是:
cc = [1,2];
cc_rep = repmat(cc, n, 1);
increm = 0:1:n-1;
cc_rep_in = cc_rep + increm';
cc_rep_in_cell = num2cell(cc_rep_in, 2);
bb(1:n) = struct('c', cc_rep_in_cell);
for i=1:n
disp(bb(i))
end
,我们得到以下输出:
c =
1 2
c =
2 3
c =
3 4
c =
4 5
c =
5 6
通知对于较小的
n
,您的循环会更快一些,但是随着它的增加,建议的方法也会更快(第一行是您的循环,而 第二个是建议的代码):对于n = 10:
Elapsed time is 0.0005548 seconds. Elapsed time is 0.00261188 seconds.
对于n = 100:
Elapsed time is 0.0033648 seconds. Elapsed time is 0.00180006 seconds.
对于n = 500:
Elapsed time is 0.021843 seconds. Elapsed time is 0.00321412 seconds.