Arrays 结构分配的矢量化

Arrays 结构分配的矢量化,arrays,matlab,structure,vectorization,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的分配 有没有可能对这段代码进行矢量化,或者我最好使用数值数组?这里有一个矢量化的解决方案,适合您提供的示例,请注意,它是为您创建的示例,但可以使用相同的逻辑很容易地进行推广 使用

我试图为整个结构中的字段指定一个非常量单元格数组值

我已经编写了一个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的分配


有没有可能对这段代码进行矢量化,或者我最好使用数值数组?

这里有一个矢量化的解决方案,适合您提供的示例,请注意,它是为您创建的示例,但可以使用相同的逻辑很容易地进行推广

使用您的代码,我们得到以下输出:

for i=1:5
    disp(b(i))
end

c =
   1   2
c =
   2   3
c =
   3   4
c =
   4   5
c =
   5   6
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
我们得到以下输出:

for i=1:5
    disp(b(i))
end

c =
   1   2
c =
   2   3
c =
   3   4
c =
   4   5
c =
   5   6
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.

这个有用吗?如果你可以使用数字阵列,那么这样做,他们会快得多。我不知道有什么方法可以加速结构的创建。