结构分配的矢量化

时间:2019-11-29 00:33:31

标签: arrays matlab structure vectorization

我试图将非恒定单元格数组值分配给整个结构的字段。

我已经编写了一个实现此目的的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的分配。

是否可以对这些代码进行矢量化处理,还是最好使用数字数组?

1 个答案:

答案 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.