【发布时间】:2015-02-03 16:12:39
【问题描述】:
我一直在寻找编写以下没有“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
任何解决方案将不胜感激。 另外,我的第二个问题是,替换上述循环是否会减少运行时间,尤其是对于大型数据集?还有其他可以减少运行时间的技巧吗?我问这样的问题的原因是我正在处理大型数据集,显然减少我工作每个步骤的运行时间将导致流程成本的大幅降低。
【问题讨论】:
-
请解释代码的用途,最好是包含输入和所需输出的示例
-
这是我在主要工作中需要的样本。您在顶部看到的随机矩阵只是为我的算法准备一些样本数据。此代码的目的是将粒子群优化中的粒子速度从
V_i更新为V_o。我在我的问题中主要寻找的是做什么而不是“for循环”。
标签: matlab for-loop vectorization normal-distribution norm