我想优化这段Matlab代码,但目前为止我失败了。我尝试了不同的repmat、sums和cumsums组合,但所有的尝试似乎都没有给出正确的结果。我希望在这个棘手的问题上得到一些专家指导。
S=1000; T=10;
X=rand(T,S),
X=sort(X,1,'ascend');
Result=zeros(S,1);
for c=1:T-1
for cc=c+1:T
d=(X(cc,:)-X(c,:))-(cc-c)/T;
Result=Result+abs(d');
end
end
基本上,我创建了1000个包含10个随机数字的向量。对于每个向量,我都会计算其中每一对值(比如第m个和第n个)之间的差异,减去这两个值的索引差(n-m)。我对所有可能的一对数值进行求和,并将结果返回给每个向量。
希望这个解释清楚了。
非常感谢您的协助。
X(j,:) - j/T
进行重新分组。在你的d
表达式中出现了两个这种形式的项。将减法操作放在循环外部进行一次,可以避免在循环内部重复执行大量的减法操作。 - Ben Voigt