簡體   English   中英

結構分配的矢量化

[英]Vectorisation of structure allocation

我正在嘗試將一個非常量單元格數組值分配給整個結構中的一個字段。

我寫了一個 for-loop 腳本來實現這個:

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

矢量化的實現是:

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.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM