2

以下のコードを時間的により効率的にしたい。できればループなしで。

引数:

t % time values vector
t_index = c % one of the possible indices ranging from 1:length(t).
A % a MXN array where M = length(t)
B % a 1XN array

コード:

m = 1;
for k = t_index:length(t)
        A(k,1:(end-m+1)) = A(k,1:(end-m+1)) + B(m:end); 
        m = m + 1;
end 

どうもありがとう。

4

1 に答える 1

2

B からサイズ NxM (B2 と呼びます) の行列を作成し、適切な場所にゼロを配置し、条件に従って三角形を作成しましたA+B2

このようなもの:

N=size(A,2);
B2=zeros(size(A));
k=c:length(t);
B2(k(1):k(N),:)=hankel(B)
ans=A+B2;

「ベクトル化」されているという事実は、最近では高速になっているという意味ではないことに注意してください。Matlab の JIT により、for ループは組み込みのベクトル化オプションと同等になり、場合によっては高速になります。

于 2013-04-26T22:41:43.287 に答える