【问题标题】:Octave: How can I vectorize this function?Octave:如何向量化这个函数?
【发布时间】:2018-06-24 16:59:03
【问题描述】:

这个函数的这些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

【问题讨论】:

  • 欢迎来到 SO。如果您需要帮助改进您的代码,总是建议用几句话描述您要归档的内容、所需的输出是什么,然后是一个完整的可运行脚本,您到目前为止是如何尝试的。如果没有这个,您希望有人阅读您的代码,然后找出您可能想要解决的问题,然后提供更好的替代方案

标签: matlab loops vectorization octave


【解决方案1】:

是的,你可以尝试用下面的代码替换你的循环:

choose=round(((n-1)*rand(N,n))+1); sample(:,(n1:n2)-n1+1,1)=data(choose(:,n1:n2)); sta=mean(sample');

关键是您应该将ij 替换为您在for 块中为它们分配的向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多