0

我正在尝试在 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

尺寸(距离)=4276x20

非常感谢你提前

里纳迪

4

1 回答 1

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)也许使用then有更好的解决方案ClassP1(??, idx) = whatever

于 2013-10-07T20:28:34.717 回答