コードのパフォーマンス (速度など) を最適化しようとしています。私はベクトル化が初めてで、ベクトル化を試みましたが、成功しませんでした (bxsfun、parfor、ある種のベクトル化なども試してください)。このコードの最適化と、これを行う方法の簡単な説明を手伝ってくれる人はいますか?
% for simplify, create dummy data
Z = rand(250,1)
z1 = rand(100,100)
z2 = rand(100,100)
%update missing param on the last updated, thanks @Bas Swinckels and @Daniel R
j = 2;
n = length(Z);
h = 0.4;
tic
[K1, K2] = size(z1);
result = zeros(K1,K2);
for l = 1 : K1
for m = 1: K2
result(l,m) = sum(K_h(h, z1(l,m), Z(j+1:n)).*K_h(h, z2(l,m), Z(1:n-j)));
end
end
result = result ./ (n-j);
toc
K_h.m 関数は境界カーネルであり、次のように定義されます (x はスカラーで、y はベクトルにすることができます)。
function res = K_h(h, x,y)
res = 0;
if ( x >= 0 & x < h)
denominator = integral(@kernelFunc,-x./h,1);
res = 1./h.*kernelFunc((x-y)/h)/denominator;
elseif (x>=h & x <= 1-h)
res = 1./h*kernelFunc((x-y)/h);
elseif (x > 1 - h & x <= 1)
denominator = integral(@kernelFunc,-1,(1-x)./h);
res = 1./h.*kernelFunc((x-y)/h)/denominator;
else
fprintf('x is out of [0,1]');
return;
end
end
結果を得るには長い時間がかかります: \Elapsed time is 13.616413 seconds.
ありがとうございました。どんなコメントでも大歓迎です。P/S: 英語が苦手でごめんなさい