我正在尝试在matlab中运行这段代码,但它具有很高的复杂性 尽管matlab在for循环中非常慢。 可以稍微帮助我优化下面的代码。
for k=1:th
for i=1:D-1
for j=i+1:D
if(dist(j,k)>dist(i,k))
t=ClassP1(k,i);
ClassP1(k,i)=ClassP1(k,j);
ClassP1(k,j)=t;
end
end
end
end
其中
大小(ClassP1)= 20x4276
大小(DIST)= 4276x20
提前多多谢谢你
Rinadi
答案 0 :(得分:2)
您可以像k
一样删除外部循环(未经测试,因为我没有您的数据,可能需要进行一些调整):
for i = 1:D-1
for j = i+1:D
iswap = find(dist(j, 1:th) > dist(i, 1:th));
ClassP1(iswap, [i, j]) = ClassP1(iswap, [j, i])
end
end
我不确定这是否会在可读性或速度方面节省很多。
但你的目标是什么?您似乎正在做基于矩阵ClassP1
(但不完全相同)对矩阵dist
进行排序。也许有更好的解决方案使用[~, idx] = sort(dist)
然后ClassP1(??, idx) = whatever
。