我一直在寻找没有“for循环”的情况下编写以下代码。我研究了数组操作,例如bsxfun()
,arrayfun
或其他 MATLAB 内置函数,但无法真正弄清楚。
n = 10;
d= 2;
x = rand(n,d);
P_best = rand(n,d);
V_i = rand(n,d)
g = rand(1,d);
r_t = rand(n,1);
a1 = 0.91;
a2 = 0.21;
a3 = 0.51;
a4 = 0.58;
l = a1*a3/(n^a2*d^a4);
for i=1:n
N_p(i,:) = 1.4962*r_t(i)*(normrnd(P_best(i,:),l*norm(x(i,:)-P_best(i,:),2))-x(i,:));
N_g(i,:) = 1.4962*r_t(i)*(normrnd(g,l*norm(x(i,:)-g,2))-x(i,:));
end
V_o = 0.7298*V_i+N_p+N_g
任何解决方案将不胜感激。另外,我的第二个问题是,替换上述循环是否会减少运行时间,尤其是对于大型数据集?还有其他可以减少运行时间的技巧吗?我问这样的问题的原因是我正在处理大型数据集,显然减少我工作每一步的运行时间将导致流程成本的大幅降低。