Octave:如何向量化这个函数?
Octave: How can I vectorize this function?
这个函数的这些for循环可以向量化吗?
function [sta]=bootstrap(data,N,p)
rand('state', sum(100*clock));
n=length(data);
n1=round(prctile(1:n,(100-p)/2));
n2=round(prctile(1:n,p/2+50));
for i=1:N
choose=round(((n-1)*rand(1,n))+1);
for j=n1:n2
sample(j-n1+1,1)=data(choose(j));
end
sta(i)=mean(sample);
end
可以,请尝试用以下代码替换您的循环:
choose=round(((n-1)*rand(N,n))+1);
sample(:,(n1:n2)-n1+1,1)=data(choose(:,n1:n2));
sta=mean(sample');
关键是你应该用你在 for
块中为它们分配的向量替换 i
和 j
。
这个函数的这些for循环可以向量化吗?
function [sta]=bootstrap(data,N,p)
rand('state', sum(100*clock));
n=length(data);
n1=round(prctile(1:n,(100-p)/2));
n2=round(prctile(1:n,p/2+50));
for i=1:N
choose=round(((n-1)*rand(1,n))+1);
for j=n1:n2
sample(j-n1+1,1)=data(choose(j));
end
sta(i)=mean(sample);
end
可以,请尝试用以下代码替换您的循环:
choose=round(((n-1)*rand(N,n))+1);
sample(:,(n1:n2)-n1+1,1)=data(choose(:,n1:n2));
sta=mean(sample');
关键是你应该用你在 for
块中为它们分配的向量替换 i
和 j
。