私のプログラムでは、合計を計算する必要があります。
.
C
と の新しい値を使用して、この合計を 2500 回計算しますz
。
引数zはベクトルの場合があります。次のように、単純な for ループとベクトル化されたバージョン コードを記述しました。
K = 200;
n_z = 40000;
C = ones(K,1); % an example, in real life the arey some coefficients (at next call will be new)
k = 0:K-1;
z = linspace(0, 2*pi, n_z); % at next call will be new
tic;
my_sum_for = zeros(1, K);
for i=1:n_z
my_sum_for(i) = C' * tan(k' * z(i));
end
toc; % Elapsed time is 1.820485 seconds.
tic;
my_sum = C' * tan(k' * z);
toc; % Elapsed time is 0.160924 seconds.
ベクトル化されたバージョンは高速ですが、十分ではありません。ベクトル化されたバージョンを改善することは可能ですか?
Dominique Jacquel の答えの後、このベクトル化されたバージョンがあり、高速です。
K = 200;
n_z = 40000;
C = ones(K,1)'; % an example, in real life they are some coefficients (at next call will be new)
k = (0:K-1)';
z = linspace(0, 2*pi, n_z); % at next call will be new
tic;
my_sum_for = zeros(1, K);
for i=1:n_z
my_sum_for(i) = C * tan(k * z(i));
end
toc; % Elapsed time is 1.521587 seconds.
tic;
my_sum = C * tan(k * z);
toc; % Elapsed time is 0.125468 seconds.
ベクトル化されたバージョン (bsxfun、arrayfun など) をさらに改善することは可能ですか? 250 秒という時間は、私にとってはまだ遅いです (すべての計算の 75% です)。