我有一个代码可以根据内核估算公式找到pdf的矢量近似值:
我在下面的代码中实现了这个公式(参见previous question)。但是,该代码需要很长时间才能运行(使用两个循环)。你能看到下面的代码并帮助我加快速度吗?
这是代码:
function pdf_est=KDE()
close all;
%%Random values of 20 pixels, range=[1 256]
data=randi([1 256],1,20)-1; %// changed: "-1"
%% Estimate histogram%%%%%
pdf_est=zeros(1,256);
z=256;
for i=0:z-1 %// changed_ subtracted 1
for j=1:length(data)
pdf_est(i+1)=pdf_est(i+1)+Gaussian(i-data(j)); %// changed: "+1" (twice)
end
end
%% Plot real histogram 1 to 256; binsize=1;
hold on
plot(0:255, imhist(uint8(data))./length(data),'r'); %// changed: explicit x axis
%% Plot histogram estimation
plot(0:255, pdf_est./length(data),'b'); %// changed: explicit x axis
hold off
function K=Gaussian(x)
sigma=1; %// change? Set as desired
K=1./(sqrt(2*pi)*sigma)*exp(-x^2./(2*sigma^2));
答案 0 :(得分:1)
你可以摆脱那些讨厌的 nested loops
,然后使用硬编码的sigma
来减少大量的vectorized solution
-
pdf_est = sum(1./(sqrt(2*pi))*exp(-bsxfun(@minus,[0:z-1]',data).^2/2),2)
或者,如果您希望能够灵活地使用sigma
,请使用此< - p>
sum(1./(sqrt(2*pi)*sigma)*exp(-bsxfun(@minus,[0:z-1]',data).^2/(2*sigma^2)),2)
真的就是这样!
快速测试通过 10x
来加速原始代码!